为什么这段代码不能输出任何XSLT

时间:2015-09-25 08:06:37

标签: xml xslt xslt-1.0

我是XSLT的新手。所以我试图做一个应该输出元素值的例子。输出格式为纯文本格式。 这是名为cdcatalog.xml的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="catalog.xsl"?>
<catalog>
    <cd>
        <title>Empire</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd>
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>
            <europe_country>Bulgaria</europe_country>
            <azia_coutry>China</azia_coutry>
        </country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
    </cd>
</catalog>

这是名为cdcatalog.xsl

的XSL文件
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text"/>
    <xsl:template match="/">
        <xsl:for-each select="cd">
            <xsl:value-of select="title"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

我期望的输出是这样的

Empire
Hide your heart

但输出窗口中没有任何内容。 我哪里错了? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

编写模板时,请尝试直接定位(即匹配)您感兴趣的内容(在这种情况下为title元素)。

XSLT样式表

如您所见,还有第二个与text()匹配的模板。如果省略它,则输出输入文档中的所有文本内容,因为这是文本节点的XSLT处理器的默认行为

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text" encoding="UTF-8" />

    <xsl:template match="title">
      <xsl:value-of select="."/>
      <xsl:text>&#10;</xsl:text>
    </xsl:template>

    <xsl:template match="text()"/>

</xsl:transform>

文字输出

Empire
Hide your heart

在线试用此解决方案here

顺便说一下,确保您的元素始终命名。名为azia_coutry的元素与asia_coutryasia_country完全不同。