<Node name="node1">
<x x="x"/>
<x x="xxx"/>
</Node>
<Node name="node2">
<x x="xx"/>
<x x="xxxx"/>
</Node>
好的,这是一个 XML 示例:
我用simplexml_load_file来称呼它的内容
如果我想调用特定的节点内容,它应该是:
$xml = simplexml_load_file('file.xml');
$contents = $xml->node1
并调用节点对象
$contents = $xml->node1->x
直到现在似乎还好,问题是,如何在不提及节点名称的情况下调用对象"X"
您注意到我在上面添加的示例有 2 个节点
要从中调用 x,我应该提到 nodename,然后是 x
我想调用整个 XML 中的所有"x"
怎么可能?
SimpleXMLElement::xpath() 可以在您没有命名空间需要担心的情况下解决问题。 如果您有命名空间...你需要 SimpleXMLElement::registerXPathNamespace()。
<?php
$xml = <<<EOT
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<Node name="node1">
<x x="x"/>
<x x="xxx"/>
</Node>
<Node name="node2">
<x x="xx"/>
<x x="xxxx"/>
</Node>
</root>
EOT;
// Original question
$s = new SimpleXMLElement($xml);
$r = $s->xpath('//Node/x');
var_dump($r);
// Something about names
$r2 = $s->xpath('Node[@name]');
$names = array();
foreach($r2 as $elem){
$names[] = "{$elem['name']}";
}
var_dump($names);
// RoseWarad's answer (more efficient than "something about names")
$r3 = $s->xpath('*/@name');
var_dump($r3);
?>