2013-01-07 51 views
1

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

可以说我有一个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)。

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

+0

这是一个'多少字符串'的问题。你想要提取什么,你的服务器是什么,你有什么工作 – Woody

回答

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> 

样式表但这并没有真正跨浏览器的工作(铬而已,因为在我看来) 。一个原因可能是阻止加载外部页面的XSS安全功能。

+0

我很抱歉,但它不适用于我。它只会产生空的身体。 –

+1

如果您使用“--disable-web-security”开关启动Chrome,那么它适用于我。不确定其他浏览器是否具有类似的开关,但是当然,您不能要求网页的观看者重新启动浏览器,以关闭安全功能来规避XSS阻塞。 –

+0

所以没有其他办法可以做到这一点? :( –

1

一对夫妇的方式来解决XSS限制......看到AJAX and Cross-Site Scripting to Read the Header

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

谢谢你的回答。经过进一步的研究,我发现这似乎是解决方案。 –

+0

+1有用的链接:) –