访问命名空间内的XML数据

时间:2017-01-31 21:40:18

标签: php xml xpath

所以我的XML看起来像这样: -

<ns0:ASN xmlns:ns0="http://schemas.microsoft.com/dynamics/2008/01/documents/ASN" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <ns0:CustPackingSlipJour class="entity">
   <ns0:BON_FileNameSeqNum>40</ns0:BON_FileNameSeqNum>
   <ns0:BON_TotalNetAmount>10.00</ns0:BON_TotalNetAmount>
   <ns0:BON_TotalTaxAmount>.00</ns0:BON_TotalTaxAmount>
   <ns0:InvoiceAccount>Acc</ns0:InvoiceAccount>
   <ns0:LanguageId>EN</ns0:LanguageId>
   <ns0:OrderAccount>I</ns0:OrderAccount>
   <ns0:PurchaseOrder>74</ns0:PurchaseOrder>
   <ns0:Qty>13.00</ns0:Qty>
   <ns0:SalesId>00025873_054</ns0:SalesId>
   <ns0:CustPackingSlipTrans class="entity">
    <ns0:BON_LineNetAmount>19.00</ns0:BON_LineNetAmount>
    <ns0:BON_SalesPrice>0.00</ns0:BON_SalesPrice>
    <ns0:DeliveryDate>2016-11-30</ns0:DeliveryDate>
    <ns0:ItemId>25712</ns0:ItemId>
    <ns0:Ordered>1.00</ns0:Ordered>
    <ns0:PackingSlipId>00339_061</ns0:PackingSlipId>
    <ns0:Qty>1.00</ns0:Qty>
   </ns0:CustPackingSlipTrans>
   <ns0:CustPackingSlipTrans class="entity">
    <ns0:BON_LineNetAmount>19.00</ns0:BON_LineNetAmount>
    <ns0:BON_SalesPrice>0.00</ns0:BON_SalesPrice>
    <ns0:DeliveryDate>2-11-30</ns0:DeliveryDate>
    <ns0:ItemId>25823-35714</ns0:ItemId>
    <ns0:Ordered>1.00</ns0:Ordered>
    <ns0:PackingSlipId>00_061</ns0:PackingSlipId>
    <ns0:Qty>1.00</ns0:Qty>
   </ns0:CustPackingSlipTrans>
  </ns0:CustPackingSlipJour>
 </ns0:ASN>

如何为所有ItemId访问CustPackingSlipTrans的值?

我尝试了各种方法来获取它,例如注册xpath然后尝试访问。但是,它不适合我。什么是获得它价值的最好方法?

2 个答案:

答案 0 :(得分:1)

使用DOMXPath::query方法的解决方案:

// $xml contains your xml contents
$doc = new \DOMDocument();
$doc->loadXML($xml);
$xpath = new \DOMXPath($doc);

foreach ($xpath->query("ns0:CustPackingSlipJour/ns0:CustPackingSlipTrans/ns0:ItemId") as $node) {
    var_dump($node->nodeValue);
}

输出:

string(5) "25712"
string(11) "25823-35714"

DEMO

答案 1 :(得分:0)

您需要使用DomXPath注册命名空间:

    $xp = new DomXPath ($doc);
    $xp->registerNamespace ('pfx', 'http://pfxuri');