I have the following xml
<collection>
<item>
<id>001</id>
<attributes>
<attr1>A</attr1>
</attributes>
</item>
<item>
<id>002</id>
<attributes>
<attr1>A</attr1>
</attributes>
</item>
<item>
<id>003</id>
<attributes>
<attr1>B</attr1>
</attributes>
</item>
</collection>
I need my xpath query to return me "true" if all attr1='A'. I tried with this but it returns "true" even if only one attr1="A".
//item/attr1/text()='A'
CodePudding user response:
Your current XPath is returning true because there is at least one attr1 element that has a text() value of A.
You could test whether the count of attr1 elements is equal to the count of attr1 elements that have text() with the value A:
count(//item/attr1) = count(//item/attr1[text() = 'A'])
Or you could evaluate an expression to test that there are not() any attr1 elements that are not equal to A:
not(//item/attr1[not(text() = 'A')])
CodePudding user response:
You can get the text value of the first node with attr1 and then to search for nodes with attr1 with text not equals to that text value:
textValue = //item/attr1/text()
//item/attr1[not(text() = textValue)]
