使用PHP、simplexml\u load\u文件和Xpath从XML文件返回唯一值

使用PHP、simplexml\u load\u文件和Xpath从XML文件返回唯一值,php,xpath,simplexml,Php,Xpath,Simplexml,提前感谢您的帮助。我已经在这个论坛和www上搜索过这个问题的答案,但找不到一个直截了当的答案 我只是尝试从只提取属性唯一值的XML文件返回结果 XML示例文件: <?xml version="1.0" encoding="ISO-8859-1" ?> <computers> <restults> <computer id="1" group_id="a" model_group="acer" name="Acer 1 GB" />

提前感谢您的帮助。我已经在这个论坛和www上搜索过这个问题的答案,但找不到一个直截了当的答案

我只是尝试从只提取属性唯一值的XML文件返回结果

XML示例文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<computers>
    <restults>
   <computer id="1" group_id="a" model_group="acer" name="Acer 1 GB" />
   <computer id="2" group_id="a" model_group="acer" name="Acer 2 GB" />
   <computer id="3" group_id="b" model_group="acer" name="Acer 3 GB" />
   <computer id="4" group_id="c" model_group="acer" name="Acer 4 GB"/>
   <computer id="5" group_id="c" model_group="acer" name="Acer 6 GB" />
   <computer id="6" group_id="d" model_group="acer" name="Acer 8 GB" />
   <computer id="7" group_id="d" model_group="acer" name="Acer 16 GB" />
   <computer id="8" group_id="d" model_group="acer" name="Acer 32 GB" />
   <computer id="9" group_id="e" model_group="acer" name="Acer 48 GB" />
    </restults>
</computers>

我想要的是php脚本在XML文件中运行,并且只向我显示唯一的
“group_id”值。ie:a、b、c、d、e

没别的了

我看过这个网站和其他网站上提供的各种解决方案,但它们都不起作用


我确实读过Xpath函数和distinct values函数,但是我找不到一种方法来确定我正在运行的Xpath的版本?我知道该函数仅在Xpath 2.0中可用,仅使用Xpath 1.0。我知道的唯一解决方案是检查所有以前的节点是否具有相同的值,如果找到,则排除该节点

<?php
$e = new SimpleXMLElement(data());
foreach( $e->xpath('/computers/restults/computer[not(@group_id=preceding-sibling::computer/@group_id)]/@group_id') as $n ) {
    echo $n, "\n";
}

function data() {
    return <<< eox
<computers>
    <restults>
        <computer id="1" group_id="a" model_group="acer" name="Acer 1 GB" />
        <computer id="2" group_id="a" model_group="acer" name="Acer 2 GB" />
        <computer id="3" group_id="b" model_group="acer" name="Acer 3 GB" />
        <computer id="4" group_id="c" model_group="acer" name="Acer 4 GB"/>
        <computer id="5" group_id="c" model_group="acer" name="Acer 6 GB" />
        <computer id="6" group_id="d" model_group="acer" name="Acer 8 GB" />
        <computer id="7" group_id="d" model_group="acer" name="Acer 16 GB" />
        <computer id="8" group_id="d" model_group="acer" name="Acer 32 GB" />
        <computer id="9" group_id="e" model_group="acer" name="Acer 48 GB" />
    </restults>
</computers>
eox;
}
xpath('/computers/results/computer[not(@group\u id=previous sibling::computer/@group\u id)]/@group\u id')作为$n){
回显$n,“\n”;
}
函数数据(){

在这个php脚本运行过程中,您希望从xml文档中获取的数据是唯一的吗?您好,Volkerk。谢谢,这非常有效。在较大的文件中速度较慢,但它实现了这一点。谢谢。