我正在尝试使用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 文件只能有 1 个根元素。
示例有效 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。它是无效的。此外,他应该将他的XML通过验证器。
如果你真的很绝望,你可以引入一个人为的根元素,但这确实是不好的做法,应该不惜一切代价避免:
$xmlstring = str_replace(
array('<action>','</paramters>'),
array('<root><action>', '</paramters></root>'),
$xmlstring
);
前面的答案都不是很准确。XML 规范定义了几种类型的实体:例如文档实体、外部分析实体、文档类型定义。您的示例不是格式正确的文档实体,而 XML 分析器通常被要求分析该实体。但是,它是一个格式良好的外部分析实体。处理格式正确的外部解析实体的方法是从骨架文档实体引用它,如下所示:
<!DOCTYPE wrapper [
<!ENTITY e SYSTEM "my.xml">
]>
<wrapper>&e;</wrapper>
,然后将文档实体传递给 XML 分析器。
由于它是一个invalid
的xml文件,因此您可以执行以下技巧。
- 在第二行插入一个虚拟的开始标记作为
<dummy>
- 最后用
</dummy>
完成它
快乐解析;)