我遇到使用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>
该文件只包含每个属性中的一个,因此我对请求非常特别,到目前为止我的代码如下:
$lib=simplexml_load_file("test.xml"); $make=$lib->Element1->Element2->Element3->Element4->Element5; print $make;
我在询问之前试图查看这个,但我能看到的唯一解决方案是当子属性未知或每个请求有多个结果时,在这种情况下不是这种情况。
任何帮助或指导都会受到极大的欢迎。
由于
答案 0 :(得分:1)
在上面的代码中,$lib
是 Element1
。所以你只需要删除一个引用。这样:
$make=$lib->Element1->Element2->Element3->Element4->Element5;
应该成为这个:
$make=$lib->Element2->Element3->Element4->Element5;
另外,SimpleXML是一个非常可怕的糟糕界面(考虑到名称中的“简单”并且存在关于如何使用它的大量混淆)。我总是建议改为DOMDocument
。
答案 1 :(得分:0)
我强烈建议您使用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'