5

XML ノードにテキストが含まれているか、空のノードのみが含まれているかを確認するにはどうすればよいですか?

例: 次の XML があるとします。

<text>
   <p> </p>
   <p> </p>
</text>

(p タグ間の空白に注意してください)

別の XML には、次の XML があります。

<text>
   <p>Hello World!</p>
</text>

2 番目の例にはテキストが含まれていますが、最初の例には空のノードが含まれているため、2 番目の例ではテストに合格する必要がありますが、最初の例では合格しません。

これを簡単に達成する方法はありますか?

(私は XSLT 2.0 を使用しています。)

4

3 に答える 3

8

normalize-spaceはあなたが望むことをすると思います、例えばこれは「合格」します:

<xsl:if test="normalize-space(/text/p) != ''">
    ...
</xsl:if>

normalize-space は、文字列から先頭と末尾の空白をすべて削除します。これにより、2 番目の例ではテキストが残りますが、最初の例ではすべての文字が削除され、空の string と比較できるようになります''

hello<space><space><space>thereまた、複数の空白文字を順番に 1 つの文字に圧縮することにも注意してください。たとえば、hello<space>there.

http://www.w3.org/TR/xpath/#function-normalize-space (XPath 1)

于 2012-08-30T08:02:49.607 に答える
8

使用:

p[normalize-space()]

これpにより、文字列値が空の文字列または空白のみの文字列ではないコンテキスト (現在の) ノードの子が選択されます。

于 2012-08-30T13:04:00.373 に答える
1

あなたが置く場合

<xsl:strip-space elements="*"/>

スタイル シートの上部にある場合、パーサーは入力ドキュメント内の完全に空白で構成されるテキスト ノードを無視します。とりわけ、これは、pスペースを含むサンプル要素が完全に空の要素と同じように扱われることを意味します。たとえば、テンプレート マッチングtext[p/text()]text2 番目の例の要素と一致しますが、p子がすべて空である (またはスペースのみを含む) 要素とは一致しません。

于 2012-08-30T08:20:43.023 に答える