使用 XSLT 从网站中提取数据
Posted
技术标签:
【中文标题】使用 XSLT 从网站中提取数据【英文标题】:Extracting data from website with XSLT 【发布时间】:2012-12-21 13:38:22 【问题描述】:我正在尝试学习 XSLT,但遇到了一个问题。我想做的事情是从网站中提取一些数据,用 xslt 模板对其进行转换,最后将其显示在我自己的 xhtml 页面中。
假设我有一个 xml 文件(这将是我的 xhtml 站点):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml-stylesheet type="text/xsl" href="myXSLTFile.xsl"?>
<!--here I want to have markup produced by xslt file-->
问题是如何做到这一点?我希望我的 xslt 文件在来自特定网站(例如 http://www.example.com)的节点上工作,并将结果生成到我自己的 xml 文件中。
如果您觉得我的解释令人困惑,请询问,我会尝试更好地解释这个问题。
编辑。我举个例子。假设我们有这个页面:http://www.w3.org/TR/xhtml1/。我想开发 XSLT 文档,从完整目录中提取章节标题并将它们放入我自己的 xml 文件中的表格中。 我遇到的问题是如何在我的 xslt 文件中引用页面:http://www.w3.org/TR/xhtml1/,以便它在其节点上工作(此页面是用 xhtml 编写的,所以我不必担心转换html 到 xml)。
编辑2。经过进一步研究,Thomas W. 的答案似乎是问题的解决方案,但您必须处理 XSS 问题(LarsH 答案中的提示)。
【问题讨论】:
这有点像“一段字符串有多长”的问题。你到底想提取什么,你的服务器是什么,你必须使用什么 【参考方案1】:理论上,你可以做类似的事情
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<page href="http://www.w3.org/TR/xslt/index.htm"/>
并且有一个类似的样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<html>
<head></head>
<body>
<xsl:for-each select="document(*/@href)//h:h2">
<xsl:copy-of select="."/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
但这并不能真正跨浏览器工作(在我看来,仅限 Chrome)。一个原因可能是 XSS 安全功能阻止加载外部页面。
【讨论】:
很抱歉,它对我不起作用。它只生成空体。 如果您使用开关--disable-web-security
启动 Chrome,那么它适用于我。不确定其他浏览器是否有类似的开关,但当然你不能要求你页面的查看者在安全功能关闭的情况下重新启动浏览器以规避 XSS 阻塞。
那么就没有其他办法了吗? :(
我不知道。您可以尝试使用 Ajax 加载其他页面,但我猜您会遇到相同类型的 XSS 问题。我不确定是否有办法绕过它——其他人可能会告诉你更多关于这个的信息。【参考方案2】:
绕过 XSS 限制的几种方法...见 AJAX and Cross-Site Scripting to Read the Header
添加本地 php 或其他服务器页面以代理到其他网站。 使用CORS。【讨论】:
感谢您的回答。经过进一步研究,我发现这似乎是解决方案。以上是关于使用 XSLT 从网站中提取数据的主要内容,如果未能解决你的问题,请参考以下文章