我在使用xpath从xml文件中获取特定名称时遇到问题。这是xml代码:
<Zones>
<Zone ID="AFI" Quantity="67" Length="140" Open="0">
<Name LngID="IT">Name 1</Name>
<Name LngID="EN">Name 2</Name>
<Name LngID="DE">Name 3</Name>
</Zone>
<Zone ID="SLE" Quantity="1" Length="2" Open="0">
<Name LngID="IT">Name 4</Name>
<Name LngID="EN">Name 5</Name>
<Name LngID="DE">Name 6</Name>
</Zone>
</Zones>
这是我的PHP代码:
foreach($area->Zones->Zone as $zone) {
$ZONE_ID = $zone['ID'];
$zone_lang = $zone->xpath("/Name[@LngID='EN']");
$ZONE_NAME = var_dum($zone_lang);
echo $ZONE_ID;
echo " - ";
echo $ZONE_NAME;
}
我只需要EN
Name
项名称(名称LngID =“EN” - &gt;名称2和名称5),但该代码不起作用(我得到数组值)。
有什么建议吗?谢谢你的建议!
答案 0 :(得分:1)
您的xpath
表达式错误,/
之前没有Name
:
$xml = simplexml_load_string($x); // assuming XML in $x
foreach($xml->Zone as $zone)
echo "$zone[ID] - " . $zone->xpath("Name[@LngID='EN']")[0] . "<br />";
看到它有效:http://codepad.viper-7.com/dHSKPT
感谢Silkfire
:PHP&lt; 5.4做:
foreach($xml->Zone as $zone) {
$name = $zone->xpath("Name[@LngID='EN']");
echo "$zone[ID] - $name[0]<br />";
}
在PHP 5.2.17中看到它:http://codepad.viper-7.com/nHVrmV
或list
:
foreach($xml->Zone as $zone) {
list($name) = $zone->xpath("Name[@LngID='EN']");
echo "$zone[ID] - $name<br />";
}
答案 1 :(得分:0)
试试这个:
$zone_lang = (string)array_pop($zone->xpath('Name[@LngID="EN"]'));