SimpleXML:解析具有值的节点和其他节点

SimpleXML: Parsing nodes with value and other nodes

从 PHP 中解析一些 XML 时遇到问题。一个节点包含一个节点值个其他节点。有没有办法同时解析两者?

我正在通过 API 使用它,所以无法控制输出。

<?php
$xml = '<root>
    <foo>
        bar
        <foobar>Foobar</foobar>
    </foo>
</root>';

$data = new \SimpleXMLElement($xml);
var_dump($data);

将输出:

object(SimpleXMLElement)#3 (1) {
  ["foo"]=>
  string(11) "bar"
}

您只需要将数据值视为字符串,就可以像普通元素一样访问它们。

$data = new \SimpleXMLElement($xml);
echo "foo=".trim($data->foo).PHP_EOL;  // trim() to remove excess whitespace
echo "foo XML=".$data->foo->asXML().PHP_EOL;
echo "foobar=".(string)$data->foo->foobar;

将输出...

foo=bar
foo XML=<foo>
        bar
        <foobar>Foobar</foobar>
    </foo>
foobar=Foobar