将XML节点拆分为php数组

时间:2014-03-12 13:08:55

标签: php xml split

我正在尝试拆分XML字符串,如下所示:

<root>
  <item attr='test'>test1</item>
  <anotherItem>test2</anotherItem>
  <item3><t>Title</t><foo></foo></item3>
</root>

我希望数组看起来像:

$arrXml[0] = "<item attr='test'>test1</item>";
$arrXml[1] = "<anotherItem>test2</anotherItem>";
$arrXml[2] = "<item3><t>Title</t><foo></foo></item3>";

我已经查看了Split XML in PHP中的解决方案,但它们只适用于只有“item”节点的XML文档。

我尝试过使用XmlReader但是在使用read()之后,如何让当前节点包含属性的xml? readOuterXml()似乎不起作用,只输出内部值。

xml不包含\ n所以我不能使用explode()。

2 个答案:

答案 0 :(得分:1)

使用SimpleXML:

$root = simplexml_load_string($xml);
$arrXml = array();

foreach($root as $child)
    $arrXml[] = $child->asXml();

答案 1 :(得分:0)

根据您希望的输出,您要做的是解析字符串而不是XML字符串。 你可以使用正则表达式或只是爆炸。

类似的东西:

$lines = explode("\n", $string);
$arrXml = array();
foreach ($lines as $line) {
    $line = trim($line);
    if ($line == '<root>' || $line == '</root>') {
        continue;
    }
    $arrXml[] = $line;
}