我在使用SimpleXML和PHP解析XML文件时遇到问题。
所讨论的XML文件是由第三方提供的,并在其中包含许多子元素(向下延伸到多个级别)。我知道我需要哪些元素,并且可以在XML文件中看到它们,但我似乎无法使用PHP打印它们。
test.xml的XML提要:
<?xml version="1.0" encoding="utf-8"?>
<Element1 xmlns="" release="8.1" environment="Production" lang="en-US">
<Element2>
<Element3>
<Element4>
<Element5>it worked</Element5>
</Element4>
</Element3>
</Element2>
</Element1>
文件只包含每个属性中的一个,所以我可以对请求非常特别,到目前为止我的代码如下:
<>之前自由=美元simplexml_load_file("test.xml");使= lib美元-> Element1> Element2 -> Element3 -> Element4 -> Element5;印刷使美元;之前我试图在询问之前查找这个,但我能看到的唯一解决方案是当子属性未知或每个请求有多个结果时,在这种情况下并非如此。
任何帮助或指导都将非常欢迎。
谢谢
在上面的代码中,$lib
是 Element1
。所以你只需要去掉一个推荐信。:
$make=$lib->Element1->Element2->Element3->Element4->Element5;
应该变成这样:
$make=$lib->Element2->Element3->Element4->Element5;
此外,SimpleXML是一个非常非常非常糟糕的接口(考虑到名称中有"简单",并且关于如何使用它存在大量混淆)。我总是推荐DOMDocument
。
我强烈推荐使用xpath,因为它会给你更多的灵活性,例如,允许你基于xml节点属性限制结果。
$xml = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?>
<Element1 xmlns="" release="8.1" environment="Production" lang="en-US">
<Element2>
<Element3>
<Element4>
<Element5>it worked</Element5>
</Element4>
</Element3>
</Element2>
</Element1>');
$data=$xml->xpath('/Element1/Element2/Element3/Element4/Element5');
echo (string)$data[0]; //outputs 'it worked'
//this also works
$data=$xml->xpath('//Element5');
echo (string)$data[0]; //outputs 'it worked'