如何使用simplexml获取XML文件中指定标签的子节点数据
错误原因
- XML文件存在语法错误,末尾的
</Client闭合标签缺失右尖括号>,且Email节点内混入了多余的冗余文本enter code here,会导致XML解析失败。 - PHP代码调用的函数和方法名错误:
- 读取XML文件的正确函数是
simplexml_load_file(),你写的simple_xml_load是不存在的错误函数名 - SimpleXMLElement类没有
getChildren()方法,获取子节点需要调用children()方法
- 读取XML文件的正确函数是
修正步骤
1. 修正XML文件内容
修正后的合法XML如下:
<Client> <Name> <First>John</First> <Last>Doe</Last> </Name> <Userid>2</Userid> <Email>john.doe@gmail.com</Email> </Client>
2. 替换为正确的PHP代码
如果需要直接获取Name节点下的子节点内容,可直接通过属性调用,写法更简单:
// 加载XML文件 $xml = simplexml_load_file('client.xml'); // 直接读取Name节点下的子节点内容 echo "First name: " . $xml->Name->First . "\n"; echo "Last name: " . $xml->Name->Last . "\n"; // 如果需要遍历Name下所有子节点,使用children()方法 foreach ($xml->Name->children() as $nodeName => $nodeValue) { echo $nodeName . ": " . $nodeValue . "\n"; }
3. 可选:添加错误排查代码
如果仍然没有输出,可添加以下代码定位解析错误:
libxml_use_internal_errors(true); $xml = simplexml_load_file('client.xml'); if (!$xml) { echo "XML解析错误:\n"; foreach (libxml_get_errors() as $error) { echo "- 第" . $error->line . "行:" . $error->message; } libxml_clear_errors(); }
内容的提问来源于stack exchange,提问作者ambaram
相关产品推荐
相关产品推荐

