在名称空间中访问XML中的元素

时间:2017-07-30 12:15:08

标签: xml xslt xml-namespaces

提供名称空间前缀以便将XML转换为XSLT已在SO中广泛涵盖。参见例如XSLT Transform XML with NamespacesXSLT with XML source that has a default namespace set to xmlnsXSLT Transformating XML to XML。然而,经过无数个小时的研究和反复试验,我可以说我没能使它发挥作用。

这是我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<library xmlns="http://void.net/library/1.0">
    <catalog>
        <cd id="c1">
            <singer id="s1">
                <name>Kate</name>
                <surname>Apple</surname>
            </singer>
        <title>Great CD</title>
        </cd>
        <cd id="c2">
            <singer id="s2">
                <name>Mary</name>
                <surname>Orange</surname>
            </singer>
        <title>Even better CD</title>
        </cd>
    </catalog>
</library>

这是我到目前为止所得到的:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    xmlns:b="http://void.net/library/1.0"
    exclude-result-prefixes="b">
    <xsl:output method="text" indent="no" />

    <xsl:template match="/b:library">
        <xsl:text>singer,title
        </xsl:text>
        <xsl:for-each select="b:catalog/b:cd">
            <xsl:value-of select="concat(b:singer/b:name, ' ', b:singer/b:surname, ', ', b:title, '
')" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

这是example and error list

1 个答案:

答案 0 :(得分:0)

我修改了样式表中的拼写错误,并想出了这个:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:b="http://void.net/library/1.0" exclude-result-prefixes="b">
    <xsl:output method="text" indent="no" />

    <xsl:template match="/b:library">
        <xsl:text>singer,title&#xa;</xsl:text>
        <xsl:for-each select="b:catalog/b:cd">
            <xsl:value-of select="concat(b:singer/b:name, ' ', b:singer/b:surname, ', ', b:title, '&#xa;')" />
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

<强>输出:

singer,title
Kate Apple, Great CD
Mary Orange, Even better CD

所以一切似乎都按预期工作。