ChatGPT解决这个技术问题 Extra ChatGPT

XPath to select element based on childs child value

Trying to select an element based on the value of one of it's childrens childrens

Thinking the following but not working, appreciate any help, thanks

./book[/author/name = 'John'] or

./book[/author/name text() = 'John']

Want all books where the author name = 'John'

Xml file

<list>
   <book>
      <author>
         <name>John</name>
         <number>4324234</number>
      </author>
      <title>New Book</title>
      <isbn>dsdaassda</isbn>
   </book>
   <book>...</book>
   <book>...</book>
</list>

A
AakashM

Almost there. In your predicate, you want a relative path, so change

./book[/author/name = 'John'] 

to either

./book[author/name = 'John'] 

or

./book[./author/name = 'John'] 

and you will match your element. Your current predicate goes back to the root of the document to look for an author.


Without . didn't work for me (needed ./author/name)
Is it possible to use this syntax in a function? Eg, how to implement something such as ./book[contains(author/name, "John")]?
@OgrishMan new questions should go in New Question, but before that I'd just try it! Generally you want single quotes ' rather than double quotes " for string literals in xpath, by the way.