나는 내가 다음 코드는 때때로 내가 볼 수 있도록 작업xml을 여러 개의 변경된 네임 스페이스로 구문 분석하는 방법은 무엇입니까?
<?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>
에서 계정 데이터를 분석하고 얻기 위해 노력하고있어 다음과 같은 XML이 그 아이 태그와 CdmCollections의 값. 그러나, 그것은 항상 동일한 쿼리에 대해 작동하지 않습니다.
원시 XML을 보면 네임 스페이스가 변경된 것을 볼 수 있습니다. 때때로 ns2 = "http://www.intuit.com/sb/cdm/qbo"(작동) 및 다른 시간 ns2 = "http://www.intuit.com/sb/cdm/v2"(나던 작동). 네임 스페이스 배열을 사용하여 그 문제를 처리 할 수 있지만 작동하지 않는다고 생각했습니다. 이 문제를 어떻게 해결할 수 있을지 제안 해 주시겠습니까? 스키마의 버전 변화를 반영하기 위해 네임 스페이스 URI를 변경
는$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'));
}
감사합니다. Michael. 이상한 점은 네임 스페이스가 10 분 동안 두 번 스왑 될 수 있다는 것입니다. 매우 짜증나! – sweenrace