PHP SimpleXML获取文档节点

时间:2015-07-31 17:57:39

标签: php xml simplexml

我需要从xml文档的最外层节点(文档本身)中提取信息。使用下面的xml:

<?xml version="1.0" encoding="UTF-8" ?>
<revue date="2015" issue="12345">
  <innernode>Oi</innernode>
</revue>

我想提取201512345。如果我尝试使用foreach循环

尝试读取节点revue,则会失败
foreach ($xml->revue as $revueIn) {
    foreach ($revueIn->attributes() as $z => $y) { 

看我是否有拼写错误或其他内容,我倒置了innernoderevue

<?xml version="1.0" encoding="UTF-8" ?>
<innernode>
  <revue date="2015" issue="12345">Oi</revue>
</innernode>

及以上代码工作(找到revue节点并正确读取其属性)

因此,在我看来,SimpleXML对最外层节点的处理/感知方式不同。

有谁知道如何访问最外层节点?提前4点你的时间。

2 个答案:

答案 0 :(得分:1)

As far as I understand it, the root element is simply your xml variable so to access its attributes you can simply use foreach ($xml->attributes() as $z => $y).

答案 1 :(得分:1)

revue不是文档节点,而是元素节点。实际上它是文档元素。

如果您将XML加载到SimpleXMLElement,它将返回文档元素。您可以使用数组语法来访问属性。

$element = new SimpleXMLElement($xml);
var_dump((string)$element['date']);

输出:

string(4) "2015"

该属性以SimpleXMLElement的形式返回。你可能需要施展它。

使用SimpleXMLElement::attributes(),您可以访问循环中的所有属性。

$element = new SimpleXMLElement($xml);
foreach ($element->attributes() as $name => $value) {
  var_dump($name, (string)$value);
}

输出:

string(4) "date"
string(4) "2015"
string(5) "issue"
string(5) "12345"