我有一个XML文件结构如下:
<users>
<user>
<name>Fred</name>
</user>
<user>
<name>Fred</name>
</user>
<user>
<name>Bob</name>
</user>
</users>
我试图使用XPath返回不同名称的列表:
$page = simplexml_load_file('data/data.xml');
$dims = $page->xpath('/users/user[not(@name=preceding-sibling::user/@name)]/@name');
这似乎不起作用。知道怎么做吗?也许加载到数组和解析数组?
@name
是属性语法,你想使用name
来考虑元素名称:
$dims = $page->xpath('/users/user[not(name=preceding-sibling::user/name)]/name');
你使用数组的想法是正确的。只需创建一个新数组来保存唯一身份,遍历用户列表,如果当前用户不在数组中,则添加它。
$page = simplexml_load_file('data/data.xml');
$uniqueUsers = array();
foreach($obj as $userObj)
{
if(!in_array((string)$page->name, $uniqueUsers))
{
$uniqueUsers[] = (string)$page->name;
}
}
是的,数组将更容易解析:
$json = json_encode($xml);
$array = json_decode($json,TRUE);