所以我试图加载的XML看起来像这样:
<tns:PersonListOutput xmlns:tns="http://www.example.com/api/person">
<tns:LastName>Doe</tns:LastName>
<tns:TransmissionDate>2018-03-02T10:16:23</tns:TransmissionDate>
<tns:People>
<tns:Person>
<tns:Name>John Doe</tns:Name>
<tns:RevisionDate>2017-08-10T01:45:40</tns:RevisionDate>
</tns:Person>
<tns:Person>
<tns:Name>Jane Doe</tns:Name>
<tns:RevisionDate>2017-08-10T01:45:43</tns:RevisionDate>
</tns:Person>
</tns:People>
</tns:PersonListOutput>
我使用以下代码从URL加载此数据:
$response_xml_data = file_get_contents($URL);
$data = simplexml_load_string($response_xml_data);
我终于能够引用顶级属性但无法获取Person的属性。如果有人可以帮助访问Person或建议更好的方法,那么我就是这样工作的最终方式。
$data->registerXPathNamespace('tns', 'http://www.example.com/api/person');
$LastName = $data->xpath('//tns:LastName ');
$TransmissionDate = $data->xpath('//tns:TransmissionDate');
echo $LastName[0];
echo "<br/>";
echo $TransmissionDate[0];
答案 0 :(得分:1)
您需要将命名空间保留在XPath查询元素之前,如下所示:
//tns:People/tns:Person/tns:Name
这将为Name
内Person
内的所有People
元素提供内容。
$data = simplexml_load_string($response_xml_data);
$data->registerXPathNamespace('tns', 'http://www.example.com/api/person');
$LastName = $data->xpath('//tns:LastName ');
$TransmissionDate = $data->xpath('//tns:TransmissionDate');
$people = $data->xpath('//tns:People/tns:Person/tns:Name');
var_dump($people);
结果
array (size=2)
0 =>
object(SimpleXMLElement)[4]
public 0 => string 'John Doe' (length=8)
1 =>
object(SimpleXMLElement)[5]
public 0 => string 'Jane Doe' (length=8)