Zugriff auf @attribute von SimpleXML

Lesezeit: 5 Minuten

1646979845 312 Zugriff auf @attribute von SimpleXML
Benjy

Ich habe ein Problem beim Zugriff auf die @attribute Abschnitt meines SimpleXML-Objekts. Wenn ich var_dump das gesamte Objekt, bekomme ich die richtige Ausgabe, und wenn ich var_dump den Rest des Objekts (die verschachtelten Tags) bekomme ich die richtige Ausgabe, aber wenn ich den Dokumenten folge und var_dump $xml->OFFICE->{'@attributes'}bekomme ich ein leeres Objekt, obwohl das erste var_dump zeigt deutlich, dass es Attribute zur Ausgabe gibt.

Weiß jemand, was ich hier falsch mache/wie ich das zum Laufen bringen kann?

  • var_dump() ist irreführend, wenn es um SimpleXML geht. Nehmen Sie die Ausgabe nicht wörtlich. Können Sie auch nicht über den Array-Zugriff auf Attribute zugreifen? zB $xml->OFFICE[‘MyAttribute’]?

    – Frank Bauer

    30. Oktober 2009 um 23:45 Uhr

  • wenn Sie verwenden möchten [‘@attributes’] Sie müssen das SimpleXMLElement zuerst in ein Array umwandeln

    – Enrique

    19. Februar 2014 um 15:59 Uhr

  • Eine weitere Referenzfrage zu Access SimpleXML-Attributen (“Wie erhalte ich den Wert eines Attributs aus einer XML-Datei in PHP?”)

    – hakre

    12. Juni 2014 um 18:52 Uhr

Versuche dies

$xml->attributes()->Token

  • Dies wurde bereits von @Artefacto beantwortet.

    – hakre

    27. September 2012 um 12:12 Uhr

  • Ja, das ist die eleganteste Lösung.

    – Christian

    23. Mai 2014 um 5:59 Uhr

  • Ich habe das versucht, und ich glaube, die Seite stürzt ab. Bora unten scheint zu denken, dass dies ein falsches Format ist, dem ich in diesem Moment zustimme. Ich habe jedoch gesehen, dass dieses (Ihr) Format mehrmals erwähnt wurde. Gibt es eine Nuance, die ich vermisse?

    – Gerard ONeill

    8. Januar 2015 um 14:25 Uhr

  • @GerardONeill, ich verstehe nicht, warum Bora sagt, dass es ein falscher Weg ist, auf die Attribute zuzugreifen, es funktioniert ziemlich perfekt. Was Sie möglicherweise vermissen, ist, dass Sie anrufen müssen attributes() auf dem Objekt, das dem richtigen Tag in Ihrem XML entspricht. Wie wenn du hast <root><tag attr="a">b</tag></root> dann müssen Sie tun $xml->tag->attributes()->attr um darauf zuzugreifen.

    – zysoft

    12. September 2015 um 22:30 Uhr

  • Dies gibt für mich null zurück, wahrscheinlich nicht, weil die Antwort falsch ist, sondern weil die Antwort keine ausreichende Erklärung für mich hat, um sie richtig zu verwenden.

    – Gans

    23. November 2015 um 15:02 Uhr

1646979846 302 Zugriff auf @attribute von SimpleXML
Niels Bom

Sie können die Attribute eines XML-Elements abrufen, indem Sie die Funktion attributes() für einen XML-Knoten aufrufen. Sie können dann den Rückgabewert der Funktion var_dumpen.

Weitere Informationen unter php.net
http://php.net/simplexmlelement.attributes

Beispielcode von dieser Seite:

$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

  • Interessant, $b wird ein … sein SimpleXMLElement Objekt also print_rund var_dump wird dir seltsame Dinge geben. Sie können es als Zeichenfolge (oder was auch immer Sie möchten) werfen, um dies zu umgehen.

    – jxmallett

    16. April 2014 um 0:39 Uhr


  • Führen Sie “”.$b aus, um es als Zeichenfolge zu behalten

    – dr_rk

    3. März 2016 um 15:35 Uhr

1646979846 307 Zugriff auf @attribute von SimpleXML
Bora

Ich habe vorher so oft zum Bekommen gebraucht @attributes wie unten und es war ein bisschen länger.

$att = $xml->attributes();
echo $att['field'];

Es sollte einfacher sein und Sie können Attribute nur im folgenden Format auf einmal erhalten:

Standardweg – Array-Zugriffsattribute (AAA)

$xml['field'];

Andere Alternativen sind:

Richtiges und schnelles Format

$xml->attributes()->{'field'};

Falsche Formate

$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];

  • Ich stimme Ihrem ersten Ihrer falschen Formate zu, weil ich einen Seitenabsturz bekomme – jedoch behaupten mehrere Leute, dass dies funktioniert. Irgendeine Erklärung oder Nuance dazu?

    – Gerard ONeill

    8. Januar 2015 um 14:26 Uhr

  • “Falsche Formate” funktionieren. Ich verwende immer das erste Beispiel. Warum ist es falsch?

    – Grzegorz

    11. September 2015 um 9:10 Uhr

  • Technisch, $xml->attributes()->{'field'}, $xml->attributes()->fieldund $f='field'; $xml->attributes()->$f; sind gleich. Sehen Sie keinen Grund, warum das eine das richtige Format und das andere das falsche ist.

    – zysoft

    12. September 2015 um 22:36 Uhr

  • $xml->attributes()->{‘field’} ist korrekt, da es sicher mit Sonderzeichen im Attributnamen verwendet werden kann (dh “data-attr”). $xml->attributes()->field funktioniert nur für Attribute, die einzelne alphanumerische Wörter sind

    – vzr

    6. Januar 2017 um 10:39 Uhr


  • SimpleXMLElement erhalten, wenn beide richtigen Optionen verwendet werden.

    – Darius.V

    3. Juli 2018 um 12:03 Uhr

1646979846 614 Zugriff auf @attribute von SimpleXML
Artefakt

$xml = <<<XML
<root>
<elem attrib="value" />
</root>
XML;

$sxml = simplexml_load_string($xml);
$attrs = $sxml->elem->attributes();
echo $attrs["attrib"]; //or just $sxml->elem["attrib"]

Verwenden SimpleXMLElement::attributes.

Die Wahrheit ist, das SimpleXMLElement get_properties Handler lügt große Zeit. Es gibt keine Eigenschaft mit dem Namen “@attributes”, also können Sie das nicht tun $sxml->elem->{"@attributes"}["attrib"].

1646979847 923 Zugriff auf @attribute von SimpleXML
Alix Axel

Sie können einfach Folgendes tun:

echo $xml['token'];

1646979847 321 Zugriff auf @attribute von SimpleXML
hakre

Wenn Sie jedoch nach einer Liste dieser Attribute suchen, ist XPath Ihr Freund

print_r($xml->xpath('@token'));

1646979848 393 Zugriff auf @attribute von SimpleXML
t2m

Es hat mir geholfen, das Ergebnis von simplexml_load_file($file) in eine JSON-Struktur zu konvertieren und wieder zu dekodieren:

$xml = simplexml_load_file("$token.xml");
$json = json_encode($xml);
$xml_fixed = json_decode($json);

$try1 = $xml->structure->{"@attributes"}['value'];
print_r($try1);

>> result: SimpleXMLElement Object
(
)

$try2 = $xml_fixed->structure->{"@attributes"}['value'];
print_r($try2);

>> result: stdClass Object
(
    [key] => value
)

990090cookie-checkZugriff auf @attribute von SimpleXML

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

Privacy policy