我有一个XML文档,我试图获取一些值,但不知道如何获取属性。结构和值的示例如下:
<vin_number value="3N1AB51D84L729887">
<common_data>
<engines>
</engines>
</common_data>
<available_vehicle_styles>
<vehicle_style name="SE-R 4dr Sedan" style_id="100285116" complete="Y">
<engines>
<engine brand="" name="ED 2L NA I 4 double overhead cam (DOHC) 16V"></engine>
</engines>
</vehicle_style>
</available_vehicle_styles>
</vin_number>
我正在尝试获取引擎[“name”]属性(不是“ENGINES”)。我认为以下内容可行,但我收到错误(我无法解析过“vehicle_style”)
$xml = simplexml_load_file($fileVIN);
foreach($xml->vin_number->available_vehicle_styles->vehicle_style->engines->engine->attributes() as $a => $b) {
echo $b;
}
答案 0 :(得分:1)
假设您的XML结构与this example XML相同,以下两个代码段将获取引擎名称。
属性层次结构方式(拆分为多行,以便您可以读取它)。
$name = (string) $xml->vin_number
->available_vehicle_styles
->vehicle_style
->engines
->engine['name'];
或者更简洁的XPath方式。
$engines = $xml->xpath('//engines/engine');
$name = (string) $engines[0]['name'];
除非您的XML中有多个引擎名称,否则根本不需要使用foreach
循环。
答案 1 :(得分:0)
使用SimpleXMLElement::attributes
方法获取属性:
foreach($xml->available_vehicle_styles->vehicle_style as $b) {
$attrs = $b->attributes();
echo "Name = $attrs->name";
}
注意:我稍微改变了从$xml
开始的元素的“路径”,因为这就是它为我加载片段的方式。
答案 2 :(得分:-1)
通过这种布局,每个引擎块可能有多个引擎,因此您必须明确选择第一个引擎。 (假设你肯定知道只会有一个。)
$name = $xml->available_vehicle_styles->vehicle_style->engines->engine[0]->attributes()->name;