Php xml文件的Xpath查询
我无法使用xpath从xml文件中获取特定名称。以下是xml代码: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> <
<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"]'));