2017-01-31 22 views
1

Also meine XML sieht wie folgt aus: -Zugriff auf XML-Daten innerhalb von Namespaces

<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> 

Wie kann ich den Wert von ItemId für alle CustPackingSlipTrans zugreifen?

Ich habe verschiedene Möglichkeiten ausprobiert, zum Beispiel xpath registrieren und dann versuchen, zuzugreifen. Es funktioniert aber nicht für mich. Was ist der beste Weg, um seinen Wert zu erreichen?

Antwort

1

Die Lösung mit DOMXPath::query Methode:

// $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); 
} 

Der Ausgang:

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

DEMO

+0

hi @RomanPerekhrest Vielen Dank für die Antwort, es funktioniert teilweise. In der Frage habe ich die Zeichenfolge in der Datei hinzugefügt, die ich den Code verwende. Allerdings wäre das XML in einer XML-Datei im selben Ordner vorhanden, wir müssen auf diese XML-Datei zugreifen und dann 'ColliId'-Daten erhalten. Was können wir in dieser Hinsicht tun? – Akshay

+0

Funktioniert wie ein Charme, danke. – Akshay

+0

@Akshay, gern geschehen – RomanPerekhrest

0

Sie müssen den Namespace mit dem DOMXPath registrieren:

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