如何使用 PHP 解析具有多个根元素的 XML?

Dia*_*nna 5 php xml parsing root

我正在尝试使用 PHP 读取此 XML 文件,并且我有两个根元素。我用 PHP 编写的代码仅读取一个根元素,当我添加另一个根元素 ( <action>) 时,它会出现错误。我想做这样的事情:if($xml->action=="register")然后打印所有参数。

这是我的 XML 文件:

<?xml version='1.0' encoding='ISO-8859-1'?>
<action>register</action>
<paramters>
    <name>Johnny B</name>
    <username>John</username>    
</paramters>
Run Code Online (Sandbox Code Playgroud)

这是我的 PHP 脚本:

<?php
$xml = simplexml_load_file("test.xml");

echo $xml->getName() . "<br />";

foreach($xml->children() as $child)
{
    echo $child->getName() . ": " . $child . "<br />";
}
?>
Run Code Online (Sandbox Code Playgroud)

我真的不知道该怎么做这一切......

dte*_*ech 3

修复您的 XML,它无效。XML 文件只能有 1 个根元素。

有效 XML 示例:

<?xml version='1.0' encoding='ISO-8859-1'?>
<action>
    <type>register</type>
    <name>Johnny B</name>
    <username>John</username>
</actions>
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想参数拥有自己的元素:

<?xml version='1.0' encoding='ISO-8859-1'?>
<action type="register">
    <name>Johnny B</name>
    <username>John</username>
</actions>
Run Code Online (Sandbox Code Playgroud)

或者如果您想要多个操作:

<?xml version='1.0' encoding='ISO-8859-1'?>
<actions>
    <action type="register">
        <name>Johnny B</name>
        <username>John</username>
    </action>
</actions>
Run Code Online (Sandbox Code Playgroud)

编辑

正如我在评论中所说,您的老师应该修复他的 XML。这是无效的。他还应该将他的 XML 通过验证器

如果你真的很绝望,你可以引入一个人工根元素,但这确实是很糟糕的做法,应该不惜一切代价避免:

$xmlstring = str_replace(
    array('<action>','</paramters>'),
    array('<root><action>', '</paramters></root>'),
    $xmlstring
);
Run Code Online (Sandbox Code Playgroud)