PHP SimpleXML通过属性获得带有子代的一个节点

时间:2018-06-24 01:08:37

标签: php xml

还没有找到直接的解决方案,而是希望使用SimpleXML做到这一点……希望通过发送的网址中的属性(id)获得单个节点和子节点

点击地址...

www.website.com/index.php#929495820

XML

<archive>
  <unit id="925535820">
    <data>Blah</data>
    <link>url</link>
  </unit>
  <unit id="929495820">
    <data>Blah</data>
    <link>url</link>
  </unit>
  <unit id="929495821">
    <data>Blah</data>
    <link>url</link>
  </unit> ... and many more ...
</archive>

我有php,它将整个XML转换成一个数组,然后进行拼接以限制显示的内容(见下文),但是我想要的是从数组中获取单个值的URL。能做到吗?如果可以,简单还是Dom?请说简单。我在Dom工作时运气不好。

$xml_get = 'filename.xml'
$xml_array = json_decode(json_encode($xml_get), 1);
$master = $xml_array['unit'];
// Show Last 200
$master = array_slice($master, 1, 200);
foreach(array_reverse($master) as $arc)
{
$last_id = $arc['@attributes']['id'];
$last_data = $arc['data'];
$last_link = $arc['link'];
// Do stuff with values...
}

1 个答案:

答案 0 :(得分:0)

如果要使用SimpleXML,可以使用simplexml_load_file加载文件并检查attributes作为ID。

然后使用例如foreach或xpath表达式:

$elm = simplexml_load_file("filename.xml");

foreach ($elm->unit as $item) {
    if ((string)$item->attributes()->id === "929495820") {
        echo $item->data;
        echo "<br>";
        echo $item->link;
    }
}

$result = $elm->xpath("/archive/unit[@id='929495820']");
echo $result[0]->data;
echo "<br>";
echo $result[0]->link;

Demo