I want to extract name attribute value from the following tag
<application
comments="Do not erase this one"
executable="run_CIET"
icon="default"
instances="1"
mode="1"
name="CIET"
order="10"
selection="1"
tool="y"
/>
I can easily get value of name attribute value based on mode value as shown below
xpath Applications.xml '//applications/application[@mode='3']'/@name
But if I want to add more condtion which is "get name attribute value when mode=X and tool attribute is not there in application tag"
How do we do this? I tried something like
xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
but its not working.
I have not used XPath before and I am finding it tricky I search W3C help on XPath but did not find what I wanted. Please help.
The | character denotes the XPath union operator. You can use the union operator in any case when you want the union of the nodes selected by several XPath expressions to be returned.
//div[@class='content'][2] means: Select all elements called div from anywhere in the document, but only the ones that have a class attribute whose value is equal to "content". Of those selected nodes, only keep those which are the second div[@class = 'content'] element of their parent.
For example if both text fields have //input[@id='something'] then you can edit the first field xpath as (//input[@id='something'])[1] and the second field's xpath as (//input[@id='something'])[2] in object repository.
Using not(@tool)
instead of !@tool
should do the job. If your XPath engine's not behaving you could conceivably do count(@tool)=0
, but that shouldn't be necessary.
How do we do this? I tried something like
xpath Applications.xml '//applications/application[@mode='3' and !@tool]'/@name
but its not working.
!@tool
is invalid syntax in XPath. There is an !=
operator, but no !
operator.
Use:
//applications/application[@mode='3' and not(@tool)]/@name
There are two things you should always try to avoid:
using the !=
operator -- it has weird definition and doesn't behave like the not()
function --never use it if one of the operands is a node-set.
Try to avoid as much as possible using the //
abbreviation -- this may cause signifficant inefficiency and also has anomalous behavior that isn't apperent to most people.
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