如何使用xslt从xml获取标记值

时间:2011-02-15 08:52:50

标签: xml xslt

<block3>
    <tag>
        <name>113</name>
        <value>Nfeb</value>
    </tag>
    <tag>
        <name>108</name>
        <value>20234254321</value>
    </tag>
</block3>

在上面的xml中,我们在block3中有两个标签。 我不想要108标签,所以我需要准备一个xslt,因为我只需要调用113。 我怎样才能做到这一点?有谁可以帮助我!

2 个答案:

答案 0 :(得分:1)

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

    <xsl:template match="/*">
        <xsl:apply-templates select="tag[not(name = '108')]"/>
    </xsl:template>

    <xsl:template match="tag">
        <xsl:value-of select="
            concat(name, '+', value)
        "/>
    </xsl:template>
</xsl:stylesheet>

针对您的示例的结果将是113+Nfeb

个人讨厌for-each,但为了清楚起见。

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="/">
        <xsl:for-each select="block3/tag[not(name = '108')]">
            <xsl:value-of select="concat(name, '+', value)"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:0)

我会创建两个模板。一个匹配所有<tag>元素,它们会执行您想要的操作,这将触及案例113.然后另一个元素覆盖它,匹配您要跳过的特定情况。

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

  <xsl:template match="tag">.....do stuff....</xsl:template>
  <xsl:template match="tag[name = '108']" />

</xsl:stylesheet>