-2

我在使用 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" -> 名称 2 和名称 5),但该代码不起作用(我得到 Array 值)。

有什么建议吗?多谢指教!

4

2 回答 2

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 < 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 />";
}
于 2013-05-17T11:52:19.863 回答
0

试试这个:

  $zone_lang = (string)array_pop($zone->xpath('Name[@LngID="EN"]'));
于 2013-05-17T11:54:07.850 回答