XML mit mehreren Namespaces mit SimpleXML analysieren
Die Aufgabe, XML mit mehreren Namespaces zu analysieren, kann bei der Arbeit mit SimpleXML entmutigend sein. Dies liegt daran, dass SimpleXML eine explizite Deklaration von Namespaces erfordert, um auf Elemente aus anderen Namespaces zuzugreifen.
Betrachten Sie das folgende XML mit mehreren Namespaces:
<code class="xml"><soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:Header> <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="1.0" soap-env:mustUnderstand="1"> <eb:From> <eb:PartyId eb:type="URI">wscompany.com</eb:PartyId> </eb:From> <eb:To> <eb:PartyId eb:type="URI">mysite.com</eb:PartyId> </eb:To> <eb:CPAId>something</eb:CPAId> <eb:ConversationId>moredata.com</eb:ConversationId> <eb:Service eb:type="compXML">theservice</eb:Service> <eb:Action>theaction</eb:Action> <eb:MessageData> <eb:MessageId>a certain messageid</eb:MessageId> <eb:Timestamp>2009-04-11T18:43:58</eb:Timestamp> <eb:RefToMessageId>mid:areference</eb:RefToMessageId> </eb:MessageData> </eb:MessageHeader> <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">an impresive binary security toekn</wsse:BinarySecurityToken> </wsse:Security> </soap-env:Header> <soap-env:Body> <SessionCreateRS xmlns="http://www.opentravel.org/OTA/2002/11" version="1" status="Approved"> <ConversationId>the goodbye token</ConversationId> </SessionCreateRS> </soap-env:Body> </soap-env:Envelope></code>
Versuch, dieses XML mit SimpleXML zu laden, ohne die Namespaces zu registrieren führt dazu, dass nur der erste Namespace erkannt wird. Um dies richtig zu analysieren, müssen wir die Namespaces registrieren und XPath-Ausdrücke erstellen, die sie berücksichtigen.
<code class="php">$xml = simplexml_load_string($res); $xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/'); $xml->registerXPathNamespace('eb', 'http://www.ebxml.org/namespaces/messageHeader'); $xml->registerXPathNamespace('wsse', 'http://schemas.xmlsoap.org/ws/2002/12/secext'); // Getting the CPAId using XPath $cpaId = $xml->xpath('//eb:CPAId'); var_export($cpaId); // Outputs: [SimpleXMLElement] // Getting the BinarySecurityToken using XPath $token = $xml->xpath('//wsse:BinarySecurityToken'); var_export($token); // Outputs: [SimpleXMLElement]</code>
Dieser aktualisierte Code registriert die Namespaces und verwendet XPath-Ausdrücke, um auf Elemente aus den verschiedenen Namespaces zuzugreifen, was uns dies ermöglicht Analysieren Sie das XML trotz mehrerer Namespaces effektiv.
Das obige ist der detaillierte Inhalt vonWie können Sie XML mit mehreren Namespaces mithilfe von SimpleXML in PHP analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!