Xml 用XSLT从网站中提取数据
我试图学习XSLT,但遇到了一个问题。我想做的事情是从网站中提取一些数据,用xslt模板进行转换,最后在我自己的xhtml页面中显示 假设我有一个xml文件(这将是我的xhtml站点):Xml 用XSLT从网站中提取数据,xml,xslt,xhtml,cross-domain,Xml,Xslt,Xhtml,Cross Domain,我试图学习XSLT,但遇到了一个问题。我想做的事情是从网站中提取一些数据,用xslt模板进行转换,最后在我自己的xhtml页面中显示 假设我有一个xml文件(这将是我的xhtml站点): 问题是如何做到这一点?我希望我的xslt文件在特定网站的节点上工作(例如),并将结果生成到我自己的xml文件中 如果你觉得我的解释令人困惑,请询问,我会尽力更好地解释这个问题 编辑。我举个例子。假设我们有这个页面:。我想开发XSLT文档,从完整的目录中提取章节的标题,并将它们放在我自己的xml文件中的一个表
问题是如何做到这一点?我希望我的xslt文件在特定网站的节点上工作(例如),并将结果生成到我自己的xml文件中
如果你觉得我的解释令人困惑,请询问,我会尽力更好地解释这个问题
编辑。我举个例子。假设我们有这个页面:。我想开发XSLT文档,从完整的目录中提取章节的标题,并将它们放在我自己的xml文件中的一个表中我遇到的问题是如何引用xslt文件中的页面,以便在其节点上工作(此页面使用xhtml编写,因此我不必担心将html转换为xml)
编辑2。经过进一步的研究,似乎Thomas W.的答案是问题的解决方案,但您必须处理XSS问题(LarsH答案中的提示) 理论上,你可以这样做
<?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安全功能阻止加载外部页面。有几种方法可以绕过XSS限制。。。看
- 将本地PHP或其他服务器页面添加到其他网站的代理
- 使用
--禁用web安全性启动Chrome,则它对我有效。不确定其他浏览器是否有类似的切换,但当然,您不能要求页面的浏览者在安全功能关闭的情况下重新启动浏览器,以避免XSS阻塞。因此,没有其他方法可以做到这一点:(据我所知并非如此。您可以尝试使用Ajax加载另一个页面,但我猜您也会遇到类似的XSS问题。我不确定是否有办法解决此问题——其他人可能会告诉您更多有关此问题的信息。感谢您的回答。经过进一步研究,我发现这似乎是解决方案。
<?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>