I have been trying to write a XPath statement which will select the first preceding-sibling of a node. That sibling should have a particular node as its child.
For example:
<a>
<c></c>
....
<b></b>
</a>
<a></a>
....
....
<a></a>
<a>
<b> start </b>
</a>
In the above XML, if my context is at the node a
which has start
text inside its child b
. How can I select the preceding node a
whose child is b
?
I tried preceding-sibling::*[b][1]
but it only selects the node a
if b
is its first child. I also tried preceding-sibling::*[1][b]
but it only checks the first preceding a
node and if it doesn't contains b
, the test fails.
Note: I am using XSLT 1.0
Can anyone suggest me a solution?
Thnx in advance!!
I believe that:
preceding-sibling::*[b][1]
or preferably:
preceding-sibling::a[b][1]
should work just fine.
I tried preceding-sibling::*[b][1] but it only selects the node a if b is its first child.
I don't think that is so.
Like this. ("The first preceding sibling who has a <b>
child"):
preceding-sibling::a[b][1]
or this ("The first preceding sibling but only if it has a <b>
child"):
preceding-sibling::a[1][b]
Multiple predicates must be true one after another. Therefore, this:
preceding-sibling::a[b and position() = 1]
is equivalent to the second expression, but not to the first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With