大家好我正在尝试使用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>
这是我第一次使用xml我真的很感激,如果有人能提供帮助的话。谢谢。
答案 0 :(得分:0)
如果将对象强制转换为字符串,它将使用其值并将其转换为:
print_r((string) $order_reference);
// 100000002
我尝试了你的代码,你做得很好!只需(string)
即可让脚本运行。
答案 1 :(得分:0)
我建议你使用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
获取节点的值。
答案 2 :(得分:0)
DOMDocument 和递归函数似乎正在努力获取此值。
Click to Add
如果当前节点中有子节点,它将再次对子节点调用parse(),并且您将获得值yu want
答案 3 :(得分:0)
更容易:
检索多个<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);