To check if a node is present in a XML or not simply use boolean function
So for the XML
If we want to know if phone_home is present or not then simply say
boolean(/person/phone_office)
Similarly if you want to check if any phone is present or not
boolean(/person/*[contains(name(.),"phone")])
and in the same way it can be extended to more complex queries, like if any phone is empty
boolean(/person/*[contains(name(.),"phone") and .=""])
or if any or the nodes are empty:
boolean(/person/*[.=""])
Same approach can be applied based on node content.
So for XML
If we need to know if any of the jobs failed:
boolean(/jobs/job[contains(.,"status failure")])
Also, the same approach can be used based on attribute name
So for XML
If we need to know if any of the attribute has phone in attribute name then:
boolean(/details/detail[contains(name(./@*), "phone")])
And same as with node names we can check if any of phone is empty:
boolean(/details/detail[contains(name(./@*), "phone") and ./@* = ""])
or if any of the attribute is empty
boolean(/details/detail[./@* = ""])
Hope this helps
So for the XML
<person id="1">
<name>John Smith</name>
<phone_home>12345</phone_home>
<phone_office></phone_office>
</person>
If we want to know if phone_home is present or not then simply say
boolean(/person/phone_office)
Similarly if you want to check if any phone is present or not
boolean(/person/*[contains(name(.),"phone")])
and in the same way it can be extended to more complex queries, like if any phone is empty
boolean(/person/*[contains(name(.),"phone") and .=""])
or if any or the nodes are empty:
boolean(/person/*[.=""])
Same approach can be applied based on node content.
So for XML
<jobs>
<job seq="1">Job 1 Completed with status success</job>
<job seq="2">Job 2 Completed with status success</job>
<job seq="3">Job 3 Completed with status failure</job>
<job seq="4">Job 4 Completed with status success</job>
</jobs>
If we need to know if any of the jobs failed:
boolean(/jobs/job[contains(.,"status failure")])
Also, the same approach can be used based on attribute name
So for XML
<details>
<detail name="John Smith"/>
<detail phone_home="12345"/>
<detail phone_office="54321"/>
</details>
If we need to know if any of the attribute has phone in attribute name then:
boolean(/details/detail[contains(name(./@*), "phone")])
And same as with node names we can check if any of phone is empty:
boolean(/details/detail[contains(name(./@*), "phone") and ./@* = ""])
or if any of the attribute is empty
boolean(/details/detail[./@* = ""])
Hope this helps