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>

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.