XPath, um ein Element basierend auf dem untergeordneten Wert des Kindes auszuwählen

208

Der Versuch, ein Element basierend auf dem Wert eines seiner Kinder auszuwählen

Wenn Sie Folgendes denken, aber nicht funktionieren, schätzen Sie jede Hilfe, danke

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

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

Willst du alle Bücher, in denen der Autorenname = 'John'

XML-Datei

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

Antworten:

300

Fast dort. In Ihrem Prädikat möchten Sie einen relativen Pfad, also ändern Sie ihn

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

entweder

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

oder

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

und Sie werden Ihrem Element entsprechen. Ihr aktuelles Prädikat kehrt zum Stammverzeichnis des Dokuments zurück, um nach einem zu suchen author.

AakashM
quelle
1
Ohne .hat bei mir nicht funktioniert (gebraucht ./author/name)
MichaelChirico
Ist es möglich, diese Syntax in einer Funktion zu verwenden? ZB wie implementiert man so etwas wie ./book[contains(author/name, "John")]?
Nur ein Lernender
1
@OgrishMan neue Fragen sollten in Neue Frage aufgenommen werden , aber vorher würde ich es einfach versuchen! Im Allgemeinen möchten Sie übrigens einfache Anführungszeichen 'anstelle von doppelten Anführungszeichen "für Zeichenfolgenliterale in xpath.
AakashM