首页 > 解决方案 > 在非分层输入上使用 xpath

问题描述

我在 PHP 中使用 SimpleXML 和 xpath 来读取 xml 文件。问题是文件(不是我自己设计的)并不是真正分层的。例如:

<country>USA</country>
...
...
<city>Los Angeles</city>
<city>San Diego</city>
...
...
<country>Canada</country>
...
...
<city>Toronto</city>
<city>Banff</city>
...
...
<country>Scotland</country>
...
...
<city>Glasgow</city>
<city>Edinburgh</city>
<city>Banff</city>

... 代表任意数量的其他字段。我可以使用 $xml = simplexml_load_file( 'filename' ); 读取文件 我的问题是找到<country>对应的每个$xml->xpath("//city")

也就是说,我想知道如何处理每个城市的xml数据中最后出现的国家

标签: phpxmlxpath

解决方案


不幸的是,simplexml 不支持 xpath 2.0,因此要实现@Birei 的建议,您必须走很长的路:

$cities = $xml->xpath("//city");
foreach ($cities as $city) {
   $country =  $city[0]->xpath('./preceding-sibling::country[1]');
   echo trim($city) . ' ' . trim($country[0]);
   echo "\r\n";
}

你应该得到相同的输出。


推荐阅读