如何使用PHP解析具有多个根元素的XML?
我正在尝试使用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>
这是我的PHP脚本:
<?php
$xml = simplexml_load_file("test.xml");
echo $xml->getName() . "<br />";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br />";
}
?>
我真的不知道怎么做……
解决方案
修复您的xml,它无效。XML文件只能有一个根元素。
有效的XML示例:
<?xml version='1.0' encoding='ISO-8859-1'?>
<action>
<type>register</type>
<name>Johnny B</name>
<username>John</username>
</actions>
或者如果您只希望参数有自己的元素:
<?xml version='1.0' encoding='ISO-8859-1'?>
<action type="register">
<name>Johnny B</name>
<username>John</username>
</actions>
或者如果您想要多个操作:
<?xml version='1.0' encoding='ISO-8859-1'?>
<actions>
<action type="register">
<name>Johnny B</name>
<username>John</username>
</action>
</actions>
编辑:
正如我在评论中所说,您的老师应该修复他的XML。它是invalid。此外,他还应该将他的XML通过a validator。
如果您真的迫不及待,可以引入人工根元素,但这是非常糟糕的做法,应该不惜一切代价避免:
$xmlstring = str_replace(
array('<action>','</paramters>'),
array('<root><action>', '</paramters></root>'),
$xmlstring
);
相关文章