1

我正在尝试学习 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 答案中的提示)。

4

2 回答 2

1

绕过 XSS 限制的几种方法...请参阅AJAX 和跨站点脚本以读取标头

  • 添加本地 PHP 或其他服务器页面以代理到其他网站。
  • 使用CORS
于 2013-01-08T11:14:52.117 回答
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 安全功能。

于 2013-01-07T20:12:52.653 回答