1

XPath (.NET) を使用して、テキスト ノードを含まないすべてのノードを選択しようとしています。

このドキュメントを考えると:

<root>
  <node1>
    <node1a>Node 1A</node1a>
  </node1>
  <node2>Node 2</node2>
  <node3>
    <node3a>Node 3A</node3a>
    <node3b></node3b>
  </node3>
  <node4></node4>
  <node5>
    <node5A></node5A>
  </node5>
</root>

ノードを取得するのに苦労しています:

<node3b></node3b>

<node4></node4>

<node5>
  <node5A></node5A>
</node5>

重複するサブツリーはマージされるため、node5A は個別に返されないことに注意してください。

私はこれがトリックを引き出すことを期待していますが、何らかの理由で(誰かが指摘したときにおそらく明らかです)、そうではありません:

//*[count(//text()) = 0]

注: XPath テスターを使用して試しています。

4

4 に答える 4

1

//*[.='']空の要素が空の文字列値を持つ必要がある限り、使用することもできます。

于 2013-08-26T08:06:46.350 に答える
0

よりシンプルで読みやすい

//*[not(.//text())]

not(...)または、必要に応じて置き換えempty(...)ます。

どちらもすでに最適化されているため、単純な XPath 実装でも「フェイル ファスト」方式で実装できるはずです (1 つのテキスト ノードが見つかり、述語が false に評価される)。

于 2013-08-26T09:02:40.927 に答える