SimpleXML: Auswählen von Elementen, die einen bestimmten Attributwert haben

Lesezeit: 2 Minuten

In einem XML-Dokument habe ich Elemente mit demselben Namen, aber der Wert eines Attributs definiert, um welche Art von Daten es sich handelt, und ich möchte alle Elemente auswählen, die einen bestimmten Wert aus dem Dokument haben. Muss ich XPath verwenden (und wenn ja, könnten Sie die richtige Syntax vorschlagen) oder gibt es eine elegantere Lösung?

Hier ist ein Beispiel-XML:

<object>
  <data type="me">myname</data>
  <data type="you">yourname</data>
  <data type="me">myothername</data>
</object>

Und ich möchte den Inhalt aller auswählen <data> Tags Kinder von <object> wer ist typ me.

PS – Ich versuche, mit PHP eine Schnittstelle zur Netflix-API herzustellen – dies sollte für meine Frage keine Rolle spielen, aber wenn Sie einen guten/besseren Weg vorschlagen möchten, bin ich ganz Ohr.

  • X-Ref: Implementierende Bedingung in XPath

    – hakre

    9. Juli 2013 um 9:43 Uhr

SimpleXML Auswahlen von Elementen die einen bestimmten Attributwert haben
Gumbo

Versuchen Sie diesen XPath:

/object/data[@type="me"]

Was sich wie folgt liest:

  • Auswählen (/) Kinder des aktuellen aufgerufenen Elements object
  • Auswählen (/) riefen ihre Kinder an data
  • Filtern ([...]), die Elemente auflistet, in denen …
    • das Attribut type (der @ bedeutet “Attribut”)
    • hat den Textwert me

Damit:

$myDataObjects = $simplexml->xpath('/object/data[@type="me"]');

Wenn object nicht das Stammverzeichnis Ihres Dokuments ist, möchten Sie vielleicht verwenden //object/data[@type="me"] stattdessen. Die // bedeutet „alles finden Nachkommen” statt “alle Kinder finden”.

  • Kann dies getan werden, wenn das Element eine Standard-XMLNS hat?

    – Austin Burk

    24. Mai 2021 um 19:28 Uhr

SimpleXML Auswahlen von Elementen die einen bestimmten Attributwert haben
willbradley

Ich habe gerade eine Funktion erstellt, die dies für mich erledigt; Es erfasst jedoch nur das erste Ergebnis. Ihr Kilometerstand kann variieren.

function query_attribute($xmlNode, $attr_name, $attr_value) {
  foreach($xmlNode as $node) { 
    if($node[$attr_name] == $attr_value) {
        return $node;
    }
  }
}

Verwendungszweck:

echo query_attribute($MySimpleXmlNode->Customer, "type", "human")->Name;

(Für das XML unten)

<Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>

  • Warum nicht den von Gumbo vorgeschlagenen XPath verwenden? Und warum einen Schalter verwenden, anstatt den einfacher zu lesen if($node[$attr_name] == $attr_value)?

    – dimo414

    29. Mai 2012 um 15:34 Uhr

  • Dies ist ein nützliches Beispiel, da Sie manchmal zusätzliche Logik einbauen möchten, sodass XPath nicht der beste Ansatz ist.

    – IMSoP

    6. Juli 2020 um 10:18 Uhr

989260cookie-checkSimpleXML: Auswählen von Elementen, die einen bestimmten Attributwert haben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy