将XSL样式表嵌入到XML中

时间:2012-03-19 00:40:03

标签: java xml xslt servlets stylesheet

我有以下XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="http://www.fakedomain.com/sally.xsl"?>

以及sally.xsl中的以下内容:

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<xsl:for-each select="documentcollection/document">
<p>
<xsl:for-each select="rss/channel/item">
<xsl:value-of select="title"/><br />
<xsl:value-of select="description"/><br />
<xsl:value-of select="link"/><br />
</xsl:for-each>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

但是,浏览器显示XML,就好像XSL行不存在一样。你知道为什么浏览器会忽略XSL样式表吗?样式表是错误的吗?

由于

4 个答案:

答案 0 :(得分:2)

  

我有以下XML:

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="http://www.fakedomain.com/sally.xsl"?>

这不是格式良好的XML文档(没有顶级元素存在),因此浏览器不会这样对待它并不是很令人惊讶。

<强>解决方案

将您的“XML”更新为格式正确的XML文档,例如:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="file:///c:/temp/delete/xxx.xsl"?>
<t/>

c:\temp\delete\xxx.xsl中使用此样式表:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     XXX
 </xsl:template>
</xsl:stylesheet>

当使用IE打开XML文件时,浏览器会显示转换结果

XXX

答案 1 :(得分:0)

看起来你没有关闭一个for-each标签吗?

答案 2 :(得分:0)

xsl:for-each的{​​{1}}循环未关闭。

答案 3 :(得分:0)

可能是same origin policy安全限制。如果您的XML和XSLT未托管在同一位置,那么浏览器可能会拒绝获取XSLT并将其应用于您的XML文件。