Для шаблона 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 совпадают, когда они не должны. Причина, конечно же, в том, что *
выбирает элементы и не заботится о текстовых узлах. Итак, как мне сделать это вместо этого?