将XML节点拆分为php数组

将XML节点拆分为php数组,php,xml,split,Php,Xml,Split,我正在尝试拆分XML字符串,如下所示: <root> <item attr='test'>test1</item> <anotherItem>test2</anotherItem> <item3><t>Title</t><foo></foo></item3> </root> 测试1 但它们只适用于只有“item”节点的XML文档 我尝试过

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

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

测试1
但它们只适用于只有“item”节点的XML文档

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

xml不包含\n,因此无法使用explode()。

使用SimpleXML:

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

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

根据您希望的输出,您要做的是解析字符串,而不是XML字符串。 您可以使用正则表达式,也可以简单地进行分解

比如:

$lines = explode("\n", $string);
$arrXml = array();
foreach ($lines as $line) {
    $line = trim($line);
    if ($line == '<root>' || $line == '</root>') {
        continue;
    }
    $arrXml[] = $line;
}
$lines=explode(“\n”,$string);
$arrXml=array();
foreach($line作为$line){
$line=修剪($line);
如果($line=''| |$line=''){
继续;
}
$arrXml[]=$line;
}

恐怕不同的行之间没有\n。我添加了换行符只是为了让我的示例更具可读性。这比你在问题中应该提到的要好:)当我使用“1232”运行此代码时,我得到:[“123”,“2”],所以在浏览器中输出xml时,不要忘记
htmlspecialchars
,因为xml节点将被视为HTML代码…啊,谢谢!它一直在工作,我只是没有看到它:/Dumb:(
$lines = explode("\n", $string);
$arrXml = array();
foreach ($lines as $line) {
    $line = trim($line);
    if ($line == '<root>' || $line == '</root>') {
        continue;
    }
    $arrXml[] = $line;
}