2010-11-25 48 views
4

我有這個(令牌)的XML文件,其中我想打印只是「打印」的字符串,忽略什麼如下:我怎樣才能得到第一個更高級別的字符串?

<tag1> 
    Print this 
    <tag2> 
     Do not print this 
    </tag2> 
</tag1> 

在我的XSL文件,使用此命令我得到的這兩個內容印刷的tag2tag1和內容:

<xsl:value-of select="tag1"/> 

謝謝!

+0

[輸出第一個字符串,不是所有的孩子的字符串(HTTP的精確複製。com/questions/4227720/output-first-string-not-all-childrens-strings) – 2010-11-25 16:52:36

回答

3

在我的XSL文件中的所有文本節點,使用此命令我 同時獲得內容TAG1和TAG2的 內容的印刷:

<xsl:value-of select="tag1"/> 

我怎樣才能得到公正第一,高 級別,字符串?

您的代碼會生成tag1元素的字符串值,該元素根據定義是元素的所有文本節點後代的連接。

爲了生產只是

的 「打印」 字符串

你需要指定只選擇相應的文本節點 XPath表達式:

/tag1/text()[1] 

指定[1]對s僅選擇第一個文本節點子節點,否則可以選擇兩個文本節點(這僅在XSLT 2.0中存在問題,其中<xsl:value-of>生成select屬性中指定的所有節點的字符串值)。

此外,上述表達式選擇整個文本節點,其字符串值不是"Print this"

的字符串值居然是:

" 
    Print this 
    " 

,準確,這將是輸出,如果你在引號包圍<xsl:value-of>

要產生完全相同的期望字符串"Print this"使用://計算器:

"<xsl:value-of select="normalize-space(/tag1/text()[1])"/>" 
3

value-of元素會給你它的文本節點和它的後代的價值。如果你只是想在元素的直接text()節點,使用:

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

<xsl:value-of select="tag1/text()"/>將選擇下tag1

相關問題