Dear list,
There is a seemingly simple XPath problem to which I cannot find the
solution. I'm hoping (or, rather, certain) that one of you can help me.
I have a list of <text> elements, like so:
<text>foo</text>
<text>foo</text>
<text>foo</text>
<text>foo</text>
I want to count, for each element, the number of preceding <text>
elements that satisfy one or both of the following two conditions: 1)
the element is the first of the list or 2) its string value begins with
"x". Here is an example, with the expected number of the count after the
element:
<text>foo</text>B B B B B B 0B B (no preceding <text> element that satisfies
either of the conditions)
<text>xfoo</text>B B B B 1B B (one preceding <text> element thatB satisfies
condition 1)
<text>foo</text>B B B B B B 2B B (one preceding <text> element thatB satisfies
condition 1 + one preceding <text> element thatB satisfies condition 2)
<text>xfoo</text>B B B B B 2 B B (same as with the previous element)
I thought that it would be as simple as the following:
count(preceding::text[position() = 1 or substring(., 1, 1) = 'x'])
But this XPath expression does not give the expected result. It gives
the following:
<text>foo</text>B B B B B B 0
<text>xfoo</text>B B B B 1
<text>foo</text>B B B B B B 1
<text>xfoo</text>B B B B B 2
That is, on the third element it gives "1" whereas I would expect "2".
What am I misunderstanding?
Thanks in advance for your help!
Wolfhart