Xml 用XSLT从网站中提取数据

Xml 用XSLT从网站中提取数据,xml,xslt,xhtml,cross-domain,Xml,Xslt,Xhtml,Cross Domain,我试图学习XSLT,但遇到了一个问题。我想做的事情是从网站中提取一些数据,用xslt模板进行转换,最后在我自己的xhtml页面中显示 假设我有一个xml文件(这将是我的xhtml站点): 问题是如何做到这一点?我希望我的xslt文件在特定网站的节点上工作(例如),并将结果生成到我自己的xml文件中 如果你觉得我的解释令人困惑,请询问,我会尽力更好地解释这个问题 编辑。我举个例子。假设我们有这个页面:。我想开发XSLT文档,从完整的目录中提取章节的标题,并将它们放在我自己的xml文件中的一个表

我试图学习XSLT,但遇到了一个问题。我想做的事情是从网站中提取一些数据,用xslt模板进行转换,最后在我自己的xhtml页面中显示

假设我有一个xml文件(这将是我的xhtml站点):


问题是如何做到这一点?我希望我的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>