xml文件的Xpath查询

时间:2013-05-17 11:27:55

标签: php xml xpath

我在使用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),但该代码不起作用(我得到数组值)。

有什么建议吗?谢谢你的建议!

2 个答案:

答案 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"]'));