2010-11-25 3 views
4

私は無視して、私は、文字列「これを印刷」印刷したいのこの(のトークン)XMLファイルを持っているものは以下:最初の上位レベルの文字列を取得するにはどうすればよいですか?

私は内容の両方を取得し、このコマンドを使用して、私のXSLファイルで
<tag1> 
    Print this 
    <tag2> 
     Do not print this 
    </tag2> 
</tag1> 

、印刷tag2tag1と内容:

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

ありがとうございました!

+0

正確な複製:まさに希望の文字列"Print this"使用を生成するために

。com/questions/4227720/output-first-string-all-childrens-strings) –

+0

良い質問、+1。説明と、現在受け入れられているより正確で正確な解決策については私の答えを見てください。 –

答えて

3

の下にあるすべてのテキストノードを選択しますTAG1とTAG2の 内容の印刷:

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

がどのように私は最初に取得することができ、高い レベル、文字列?

コードでは、tag1要素の文字列値が生成されます。これは定義上、要素のすべてのテキストノード - 子孫の連結です。

/tag1/text()[1] 
:あなたが唯一のそれぞれのテキストノードを選択するXPath式を指定する必要があり、文字列

"これを印刷する" だけ

を生成するために

[1]を指定する必要があります最初のテキストノードの子のみを選択します。それ以外の場合は2つのテキストノードを選択できます(これは<xsl:value-of>select属性で指定されたすべてのノードの文字列値を生成するXSLT 2.0でのみ問題になります)。

さらに、上記の式はテキストノード全体を選択し、その文字列値は"Print this"ではありません。

" 
    Print this 
    " 

とあなたが引用符で<xsl:value-of>を囲む場合は、まさにこの出力のようになります。

文字列値は、実際にあります。 // stackoverflowの:[出力最初の文字列ではなく、すべての子供の文字列](HTTPの

"<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()"/>は私が内容の両方を取得し このコマンドを使用して、私のXSLファイルでtag1

関連する問題