使用XSLT从网站提取数据

时间:2013-01-07 19:12:53

标签: xml xslt xhtml cross-domain

我正在尝试学习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文件中。

如果您发现我的解释令人困惑,请询问,我会尝试更好地解释这个问题。

EDIT。我举个例子。假设我们有这个页面:http://www.w3.org/TR/xhtml1/。我想开发XSLT文档,从Full table目录中提取章节和章节的标题,并将它们放入我自己的xml文件中的表中。 我遇到的问题是如何在我的xslt文件中引用页面http://www.w3.org/TR/xhtml1/以便它在其节点上工作(此页面用xhtml编写,所以我不必担心关于将html转换为xml)。

EDIT2。经过进一步的研究,似乎Thomas W.的答案是问题的解决方案,但你必须处理XSS问题(LarsH答案中的提示)。

2 个答案:

答案 0 :(得分: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安全功能。

答案 1 :(得分:1)

解决XSS限制的几种方法......请参阅AJAX and Cross-Site Scripting to Read the Header

  • 添加本地PHP或其他服务器页面以代理到其他网站。
  • 使用CORS