XSLT - 检索没有内部标记的XMl标记值

时间:2011-07-19 08:09:10

标签: xslt xpath xml-parsing

我有一个看起来像这样的xml:

<OuterTag> outerVal
   <Name> value1 </Name>
   <Desc> value2 </Desc>
</OuterTag>

我想检索外部标记的值(“outerVal”)。 当我使用

xsl:value-of select="OuterTag" />

我得到“outerValvalue1value2”。 我怎样才能只检索外部值?

4 个答案:

答案 0 :(得分:1)

完整的解决方案:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    <xsl:output omit-xml-declaration="yes" method="text"/>
    <xsl:template match="/">
        <xsl:value-of select="normalize-space(OuterTag/text()[1])" />
    </xsl:template>
</xsl:stylesheet>

输出:

outerVal

注意:空格在XML元素中很重要。这是一个样式表,显示OuterTag及其子项中文本节点的位置/结构:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" method="text" />
    <xsl:template match="OuterTag/text()">
        <xsl:value-of select="concat('[', ., ']')" />
    </xsl:template>
    <xsl:template match="OuterTag/*/text()">
        <xsl:value-of select="concat('(', ., ')')" />
    </xsl:template>
</xsl:stylesheet>

输出:

[ outerVal
   ]( value1 )[
   ]( value2 )[
]

添加normalize-space

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" method="text" />
    <xsl:template match="OuterTag/text()">
        <xsl:value-of select="concat('[', normalize-space(), ']')" />
    </xsl:template>
    <xsl:template match="OuterTag/*/text()">
        <xsl:value-of select="concat('(', normalize-space(), ')')" />
    </xsl:template>
</xsl:stylesheet>

产生以下结果:

[outerVal](value1)[](value2)[]

答案 1 :(得分:0)

尝试text():

<xsl:value-of select="OuterTag/text()" />

答案 2 :(得分:0)

使用此:<xsl:value-of select="OuterTag/text()"/>

答案 3 :(得分:0)

将此xpath调整为您的上下文

 "/Outertag/text()[1]"

这将检索Outertag根节点的第一个文本节点。其他答案将向您展示如何获取Outertag上下文节点的所有文本子节点。