为什么XSLT不能解析这个XML?

时间:2011-02-09 15:15:33

标签: xml xslt browser

以此页面中的XSLT和XML为例:

http://www.w3schools.com/xsl/xsl_transformation.asp

我有一个包含(上面修改过的示例)的xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
         xmlns="http://tempuri.org/">
    <cd>

就我而言,当浏览器处理XSLT / XML时,输出不包含任何内容。我从元素中删除属性的那一刻起作用。问题是,我真的没有选择从文件中预处理这些属性。

有人可以解释如何强制XSLT按原样使用XML吗?毕竟,这些属性看起来相当标准。

非常感谢,

3 个答案:

答案 0 :(得分:7)

将该默认命名空间添加到样式表中,然后使用它。

答案 1 :(得分:1)

您正在修改<cd>的默认命名空间,声明基本上为

<{http://tmpuri.org}:cd> 

将与未修改的样式表不匹配。

答案 2 :(得分:0)

Ignacio说您的文档是在命名空间中定义的。因此,在样式表中,您只能匹配完全限定名称。

如果XSLT样式表仅匹配本地名称:

<xsl:template match="cd">
...
</xsl:template>

然后永远不会匹配。但是,如果将它放在样式表的根元素中:

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

...并使用限定名称进行匹配,如下所示:

<xsl:template match="catalog:cd">
...
</xsl:template>

...然后它有效。

相关问题