Ich habe den folgenden XML-Code, ich versuche, die Kontodaten vonWie kann man XML mit mehreren sich ändernden Namespaces analysieren?
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:SearchResults xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:ns2="http://www.intuit.com/sb/cdm/qbo" xmlns:ns3="http://www.intuit.com/sb/cdm/qbopayroll/v1">
<ns2:CdmCollections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Accounts">
<Account>
<Id idDomain="QBO">31</Id>
<SyncToken>0</SyncToken>
<MetaData>
<CreateTime>2010-02-16T18:03:50-08:00</CreateTime>
<LastUpdatedTime>2010-02-16T18:03:50-08:00</LastUpdatedTime>
</MetaData>
<Name>Accounts Payable</Name>
<Subtype>AccountsPayable</Subtype>
<CurrentBalance>34002.00</CurrentBalance>
</Account>
<Account>
<Id idDomain="QBO">36</Id>
<SyncToken>0</SyncToken>
<MetaData>
<CreateTime>2011-01-11T13:24:14-08:00</CreateTime>
<LastUpdatedTime>2011-01-11T13:24:14-08:00</LastUpdatedTime>
</MetaData><Name>Accounts Receivable (A/R)</Name>
<Subtype>AccountsReceivable</Subtype>
<CurrentBalance>1125.85</CurrentBalance>
</Account>
</ns2:CdmCollections>
<ns2:Count>10</ns2:Count>
<ns2:CurrentPage>1</ns2:CurrentPage>
</ns2:SearchResults>
Der folgenden Code manchmal zu analysieren und erhalten arbeiten, so dass die ich, dass Kinder Tags und Werte von CdmCollections sehen kann. Es funktioniert jedoch nicht immer für die gleiche Abfrage.
Mit Blick auf das rohe Xml kann ich die Namespaces ändern, z. manchmal ns2 = "http://www.intuit.com/sb/cdm/qbo" (funktioniert) und zu anderen Zeiten ns2 = "http://www.intuit.com/sb/cdm/v2" (funktioniert nicht). Ich dachte, mit dem Namespaces-Array könnte ich das Problem behandeln, aber es funktioniert nicht. Irgendwelche Vorschläge, wie ich das beheben kann?
$account_xml = new SimpleXMLElement($account_query_response);
$namespaces = $account_xml->getNamespaces(true);
$account_xml->registerXPathNamespace('c', $namespaces["ns2"]);
$x = 0;
foreach($account_xml->xpath('//c:SearchResults') as $search) {
echo "<br>row " . $x;
$search->registerXPathNamespace('c', $namespaces["ns2"]);
var_dump($search->xpath('//c:CdmCollections'));
}
Danke Michael. Das Merkwürdige ist, dass der Namespace einige Male innerhalb von 10 Minuten ausgetauscht werden kann. Sehr nervig! – sweenrace