[英]How to Parse XML in PHP with simplexmlelement?
我正在嘗試使用 simplexmlelement 在 php 中解析一個 xml 文件。
<OrderResponse>
<OrderResponseReferences>
<BuyersOrderNumber Preserve="true">100000002</BuyersOrderNumber>
<SuppliersOrderReference Preserve="true">6711637</SuppliersOrderReference>
</OrderResponseReferences>
</OrderResponse>
我正在使用下面的代碼訪問buyersOrderNumber
$local_file_path = "C:/etrade_files/Orders/order_acknowledgements/ORA1707220-05-2015--16-48-31.xml";
$xml = simplexml_load_file($local_file_path);
foreach($xml->children() as $child)
{
$child = $child->getName();
if($child == "OrderResponseReferences")
{
$order_reference = $xml->$child->BuyersOrderNumber;
print_r($order_reference);
}
}
結果:
SimpleXMLElement Object ( [@attributes] => Array ( [Preserve] => true ) [0] => 100000002 )
我怎樣才能得到100000002的訂單號
此外,這個文件有多個訂單行,如果有人能解釋我可以用來獲取所有必需信息的邏輯,它真的會對我有幫助。
<OrderResponseLine>
<LineNumber>1</LineNumber>
<OrderResponseLineReferences>
<BuyersOrderLineReference Preserve="true">100000002</BuyersOrderLineReference>
</OrderResponseLineReferences>
<Product>
<SuppliersProductCode>108696</SuppliersProductCode>
</Product>
<Quantity>
<Amount>2</Amount>
</Quantity>
<LineTotal>331.18</LineTotal>
</OrderResponseLine>
如果您將對象轉換為字符串,它將使用其值並進行轉換:
print_r((string) $order_reference);
// 100000002
我試過你的代碼,你做得很好! 只是(string)
應該足以讓腳本運行。
我建議您使用 DOM 來解析此 XML。
$xml = new DOMDocument();
$xml->load('ORA1707220-05-2015--16-48-31.xml');
$root = $xml->getElementsByTagName('OrderResponse');
$tree = $root->item(0);
$child = $tree->childNodes;
foreach($child as $children){
switch($children->nodeName){
case 'OrderResponseReferences':
//instructions
}
}
並使用nodeValue
獲取節點的值。
function seems me working to get this value. DOMDocument和函數似乎我正在努力獲得這個值。
$xml = new DOMDocument();
$xml->load('ORA1707220-05-2015--16-48-31.xml');
$root = $xml->getElementsByTagName('OrderResponse');
$tree = $root->item(0);
parse($tree);
function parse($tree){
$child = $tree->childNodes;
foreach($child as $children){
switch($children->nodeName){
//Case
//instructions
}
if($child->hasChildNodes())
parse($child);
}
}
如果當前節點有子節點,它會在子節點上再次調用 parse(),你會得到你想要的值
有更簡單的方法:
檢索許多<BuyersOrderNumber>
:
使用xpath
:
$numbers = $xml->xpath("//BuyersOrderNumber");
解釋:
xpath
語句將選擇任何<BuyersOrderNumber>
//
)$numbers
將保存一個SimpleXML
元素數組輸出所有節點:
foreach ($numbers as $n)
echo $n;
檢索單個<BuyersOrderNumber>
節點
標准方法:如果 XML 中只有一個這樣的節點:
echo $xml->OrderResponseReferences->BuyersOrderNumber;
再次xpath
:
echo $xml->xpath("//BuyersOrderNumber")[0];
獲取所有節點並僅回顯第一個(這就是[0]
的原因)
查看一個工作示例: https : //eval.in/368739
當然,示例中的$xml
是..
$xml = simplexml_load_file($local_file_path);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.