これらの XPath を評価するために何を使用していますか? 優れたアプローチは思い浮かびませんが、使用しているものによっては、すべてのb
s を選択して繰り返し処理し、それぞれに c の値または空白の値を使用するのは簡単です。
これは優れたアプローチではありませんが、サンプル入力に対しては機能します。
//b/c | //b[not(*)] | //b[not(c) and *]/text()
説明は次のとおりです。
c
a の下にあるすべての を選択しますb
b
子要素がない場合は、要素自体を選択します
b
子を持たない の最初のテキスト ノードを選択しますc
。
b
これは、子要素を持つすべての要素に少なくとも 1 つのテキスト ノードがあり、それらの最初のノードが完全に空白であると仮定して機能します。
XSLT による検証:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="//b/c | //b[not(*)] | //b[not(c) and *]/text()[1]">
<item>
<xsl:value-of select="."/>
</item>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
サンプル入力で実行したときの出力:
<root>
<item>c1</item>
<item></item>
<item>c3</item>
</root>