Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php xml文件的Xpath查询_Php_Xml_Xpath - Fatal编程技术网

Php xml文件的Xpath查询

Php xml文件的Xpath查询,php,xml,xpath,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> <

我无法使用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>
}

我只需要
EN
name项的名称(name LngID=“EN”->name 2和name 5),但该代码不起作用(我得到数组值)


有什么建议吗?谢谢你的忠告

您的
xpath
表达式错误,在
名称之前没有
/

$xml = simplexml_load_string($x); // assuming XML in $x
foreach($xml->Zone as $zone)
    echo "$zone[ID] - " . $zone->xpath("Name[@LngID='EN']")[0] . "<br />";
请参见在PHP 5.2.17中使用:

或与:

foreach($xml->Zone as$Zone){
列表($name)=$zone->xpath(“name[@LngID='EN']);
echo“$zone[ID]-$name
”; }
试试这个:

  $zone_lang = (string)array_pop($zone->xpath('Name[@LngID="EN"]'));

var_dum($zone_lang)&检查得到的结果,因为xpath返回数组。所以您需要
$zone\u lang[0]
。是的,
xpath
返回一个数组(即使只有一个元素)<代码>xpath(…)[0]
引用了第一个匹配的元素。请使用您尝试过的代码再次编辑您的帖子。-它返回一个数组,这是一个很好的文档:-您的问题与其中包含的答案完全相同。数组取消引用仅适用于5.4+,OP可能运行的版本低于5.4+。我喜欢使用array_pop()+1这就是我要找的:)谢谢的SilkFire只需使用
[0]
,这是第一个条目。array_pop是错误的,因为这里没有使用变量。此代码给出通知=错误做法,请不要建议使用Stackoverflow(至少不是唯一的方法)(阅读:放置警告,预先显示更好的代码等。pp)array_pop只会在严格模式下给您错误,这是不常用的。
foreach($xml->Zone as $zone) {

$name = $zone->xpath("Name[@LngID='EN']");
echo "$zone[ID] - $name[0]<br />";
}
foreach($xml->Zone as $zone) {

list($name) = $zone->xpath("Name[@LngID='EN']");
echo "$zone[ID] - $name<br />";
}
  $zone_lang = (string)array_pop($zone->xpath('Name[@LngID="EN"]'));