2011-07-19 92 views
1

我有一個看起來像這樣的XML:XSLT - 無需檢索它的內標籤的XML標記值

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

,我想找回外層標籤(「outerVal」)的值。 當我使用

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

我得到 「outerValvalue1value2」。 我如何檢索只有外部值?

+0

針對我定義爲社區wiki的基本問題+1 –

回答

0

嘗試文本():

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

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

0

適應這個XPath對上下文

"/Outertag/text()[1]" 

這將檢索Outertag根節點的第一個文本節點。其他答案顯示如何獲取Outertag上下文節點的所有文本子節點。

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)[]