次の内容を無視して、「これを印刷」文字列だけを印刷したいこの (トークンの) XML ファイルがあります。
<tag1>
Print this
<tag2>
Do not print this
</tag2>
</tag1>
私の XSL ファイルでは、このコマンドを使用して、次の内容tag1
と内容の両方を出力しますtag2
。
<xsl:value-of select="tag1"/>
ありがとうございました!
value-of
要素の値は、そのテキスト ノードとその子孫の値を示します。text()
要素の直接のノードだけが必要な場合は、これを使用します。
<xsl:value-of select="tag1/text()"/>
私の XSL ファイルでは、このコマンドを使用して、tag1 の内容と tag2 の内容の両方を出力します。
<xsl:value-of select="tag1"/>
最初のより高いレベルの文字列を取得するにはどうすればよいですか?
コードはtag1
要素の文字列値を生成します。これは、定義上、要素のすべてのテキスト ノードの子孫を連結したものです。
ただ生産するために
「これを印刷」文字列
それぞれのテキスト ノードのみを選択する XPath 式を指定する必要があります。
/tag1/text()[1]
[1]
最初の text-node の子のみを選択するには、指定が必要です。そうしないと、2 つの text-node が選択される可能性があります (これは<xsl:value-of>
、属性で指定されたすべてのノードの文字列値を生成するXSLT 2.0 のみの問題select
です)。
さらに、上記の式はテキスト ノード全体を選択し、その文字列値は not"Print this"
です。
実際の文字列値は次のとおりです。
"
Print this
"
を引用符で囲むと、まさにこれが出力<xsl:value-of>
されます。
必要な文字列を正確に生成するには、次を"Print this"
使用します。
"<xsl:value-of select="normalize-space(/tag1/text()[1])"/>"
<xsl:value-of select="tag1/text()"/>
下のすべてのテキストノードを選択しますtag1