XML-Knoten mit getrenntem Namen mithilfe von SimpleXML lesen
In PHP wird die Verwendung von SimpleXML zum Extrahieren von Daten aus XML-Dokumenten zu einer Herausforderung, wenn Sie auf Elemente mit stoßen Namen mit Bindestrich. Lassen Sie uns dieses Problem untersuchen und eine Lösung finden.
Betrachten Sie das folgende XML:
<gnm:Workbook xmlns:gnm="http://www.gnumeric.org/v10.dtd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gnumeric.org/v9.xsd"> <office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" office:version="1.1"> <office:meta> <dc:creator>Mark Baker</dc:creator> <dc:date>2010-09-01T22:49:33Z</dc:date> <meta:creation-date>2010-09-01T22:48:39Z</meta:creation-date> <meta:editing-cycles>4</meta:editing-cycles> <meta:editing-duration>PT00H04M20S</meta:editing-duration> <meta:generator>OpenOffice.org/3.1$Win32 OpenOffice.org_project/310m11$Build-9399</meta:generator> </office:meta> </office:document-meta> </gnm:Workbook>
Um das document-meta-Element und seine untergeordneten Elemente zu lesen, betrachten Sie das Folgender Anfangscode:
$xml = simplexml_load_string($gFileData); $namespacesMeta = $xml->getNamespaces(true); $officeXML = $xml->children($namespacesMeta['office']); var_dump($officeXML); echo '<hr />';
Dieser Code speichert alle unmittelbar untergeordneten Elemente von office-Element, das document-meta enthält. Der Versuch, mit $officeXML->document-meta direkt auf document-meta zuzugreifen, schlägt jedoch fehl und gibt int 0 zurück.
Der Grund für dieses Verhalten liegt in der Handhabung von Namen mit Bindestrich durch SimpleXML. Standardmäßig werden Elementnamen mit Bindestrich in „camelCase“ konvertiert. In diesem Fall wird „document-meta“ zu „documentMeta“. Um auf dieses Element zuzugreifen, verwenden Sie die folgende Syntax:
$docMeta = $officeXML->{'document-meta'}; var_dump($docMeta);
Durch die Verwendung von geschweiften Klammern und String-Notation können Sie auf den tatsächlichen Elementnamen ohne die standardmäßige Groß-/Kleinschreibungsumwandlung von SimpleXML zugreifen. Dadurch wird das Element document-meta erfolgreich ausgegeben.
Hinweis: Diese Syntax gilt nur für Elementknoten. Auf Attributknoten innerhalb von @attributes kann direkt über die Array-Notation zugegriffen werden, unabhängig von ihrer Silbentrennung.
Das obige ist der detaillierte Inhalt vonWie greife ich mit SimpleXML in PHP auf XML-Knotennamen mit Bindestrich zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!