我使用以下代码读取xml文件
$xml = file_get_contents('file.xml');<br>
include('xml_lib.php');<br>
$data = XML_unserialize($xml);<br>
$i = 0;<br>
foreach ($data[ordersetChangeReport][tradeItem] as $value) {<br>
$productNumber = $data[ordersetChangeReport][tradeItem][$i][sfgItemNumber];<br>
$gewichtProduct = $data[ordersetChangeReport][tradeItem][$i][sfgTotalNetVolume];<br>
$metadata = array(<br>
'gewichtProduct' => $gewichtProduct,<br>
);<br>
foreach ($metadata as $meta_key => $metavalue) {<br>
update_post_meta($productNumber, $meta_key, $metavalue);<br>
}<br>
$i++;<br>
}
我的问题:如何获得attrubute值&#34; unitOfMeasure&#34;来自现场&#34; sfgTotalNetVolume&#34;?
非常感谢提前。
答案 0 :(得分:1)
您正在使用一些以通用方式将XML转换为数组的库。这通常是一个坏主意,因为它意味着丢失信息并直接依赖于输入XML结构。
使用Xpath直接使用DOM扩展并不困难:
$xml = <<<'XML'
<ordersetChangeReport> <tradeItem> <sfgItemNumber>196306</sfgItemNumber> <sfgTotalNetVolume unitOfMeasure="LT">1.00000</sfgTotalNetVolume> </tradeItem> <tradeItem> <sfgItemNumber>674892</sfgItemNumber> <sfgTotalNetVolume unitOfMeasure="KG">1.50000</sfgTotalNetVolume> </tradeItem> </ordersetChangeReport>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate('/ordersetChangeReport/tradeItem') as $item) {
var_dump(
[
'number' => $xpath->evaluate('string(sfgItemNumber)', $item),
'volume' => [
'value'=> $xpath->evaluate('number(sfgTotalNetVolume)', $item),
'unit'=> $xpath->evaluate('string(sfgTotalNetVolume/@unitOfMeasure)', $item)
]
]
);
}
输出:
array(2) {
["number"]=>
string(6) "196306"
["volume"]=>
array(2) {
["value"]=>
float(1)
["unit"]=>
string(2) "LT"
}
}
array(2) {
["number"]=>
string(6) "674892"
["volume"]=>
array(2) {
["value"]=>
float(1.5)
["unit"]=>
string(2) "KG"
}
}
答案 1 :(得分:0)
好的,现在这有点复杂,因为您使用的是库和xml文件,我不知道。但是,我想出了一个使用内置SimpleXML class的小解决方案。
这是如何访问属性的基本示例,您需要编写一些迭代代码;)
我们走了:
function f(){
var continued=document.getElementById("Form:testID").value;
if(continued==="true"){
PF('dialogWidgetVar').show();
}
}
window.addEventListener('beforeunload', f(), true);
使用<?php
$xml_string = '<ordersetChangeReport> <tradeItem> <sfgItemNumber>196306</sfgItemNumber> <sfgTotalNetVolume unitOfMeasure="LT">1.00000</sfgTotalNetVolume> </tradeItem> <tradeItem> <sfgItemNumber>674892</sfgItemNumber> <sfgTotalNetVolume unitOfMeasure="KG">1.50000</sfgTotalNetVolume> </tradeItem> </ordersetChangeReport>';
$xml = simplexml_load_string($xml_string);
$unitOfMeasure = $xml->tradeItem->sfgTotalNetVolume->attributes()->unitOfMeasure;
echo $unitOfMeasure;
?>
查看整个树。请记住,并非所有属性都会显示,因此您需要在子项上使用print_r,例如
print_r($xml);
编辑:小信息:
变量print_r($xml->tradeItem->sfgTotalNetVolume);
不是字符串类型变量,而是$unitOfMeasure
。您仍然可以像字符串一样访问它,因为它实现了SimpleXMLElement Object
- 方法
答案 2 :(得分:0)
非常感谢你们快速和快速的内容丰富的答案。
我需要知道的规则正是:
$xml->tradeItem->sfgTotalNetVolume->attributes()->unitOfMeasure;
它就像一个魅力。