5

XSLT テンプレートの場合、特定の子要素を持ち、テキスト ノードを持たない要素を対象とする XPath 式が必要です。

<!-- 1: matches -->
<a><b/></a>

<!-- 2: does not match -->
<a>foo bar quux<b/></a>

<!-- 3: does not match -->
<a>whatever <b/> further text</a>

<!-- 4: does not match -->
<a>whatever <b/> further text <b/></a>

 <!-- 5: does not match -->
<a><x/><b/></a>

<!-- 6: does not match -->
<a>foo bar quux</a>

を思いついたa[*[1 = last() and name() = 'b']]のですが、ケース 2 または 3 が一致しない場合に一致します。もちろん、その理由は、*が要素を選択し、テキスト ノードを気にしないためです。では、代わりにこれを行うにはどうすればよいですか?

4

2 に答える 2

3

あなたはただ使うことができます

a[count(*)=1 and b and not(text())]

1 つの b のみを探している場合は、他の要素もテキストもありません。xml にキャリッジ リターンがある場合、一部のプロセッサはそれをテキストとして受け取ることに注意してください。

于 2012-04-10T08:36:31.167 に答える
2
a[b and not(text() or *[2])]

aこれにより、子を持つ現在のノード (コンテキスト ノード) のすべての子が選択されb、テキスト ノードの子または 2 番目の要素の子はありません。

PI やコメントの子も必要ない場合は、短いバージョンを使用できます。

a[b and not(node()[2])]
于 2012-04-10T12:18:46.873 に答える