我有以下XML结构:
<Folder>
<Placemark>
<ExtendedData>
<Data name="Id">
<value>152285415</value>
</Data>
<Data name="Name">
<value>Tester</value>
</Data>
</ExtendedData>
</Placemark>
</Folder>
我需要直接访问-Object的属性&#34; name&#34; =&#34; Id&#34;。
所以我尝试了这个:
$xml->Document->Folder->Placemark->ExtendedData->xpath('data[@name="Id"]')
但是给出了空数组。
我最终需要的是&#34; 152285415&#34;
任何帮助表示感谢。
答案 0 :(得分:1)
这似乎可以完成这项工作:
<?php
$xml = '<Folder>
<Placemark>
<ExtendedData>
<Data name="Id">
<value>152285415</value>
</Data>
<Data name="Name">
<value>Tester</value>
</Data>
</ExtendedData>
</Placemark>
</Folder>';
$xml = simplexml_load_string($xml);
foreach($xml->Placemark->ExtendedData->Data as $item) {
if($item->attributes()['name'] == 'Id') {
echo $item->value;
}
}
答案 1 :(得分:1)
您可以使用XPath直接访问所需内容:
<?php
$xml = '<Folder>
<Placemark>
<ExtendedData>
<Data name="Id">
<value>152285415</value>
</Data>
<Data name="Name">
<value>Tester</value>
</Data>
</ExtendedData>
</Placemark>
</Folder>';
$xml = new SimpleXMLElement($xml);
$result = $xml->xpath('/Folder/Placemark/ExtendedData/Data[@name="Id"]');
echo "Value: ".$result[0]->value; // Value: 152285415
答案 2 :(得分:0)
不要担心文档的整体层次结构(虽然这被滥用了很多)是使用//作为XPath的第一部分。所以查询可以写成......
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$xmlDoc = <<<XML
<Folder>
<Placemark>
<ExtendedData>
<Data name="Id">
<value>152285415</value>
</Data>
<Data name="Name">
<value>Tester</value>
</Data>
</ExtendedData>
</Placemark>
</Folder>
XML;
$xml = new SimpleXMLElement($xmlDoc);
$value = $xml->xpath('//Data[@name="Id"]/value')[0];
echo "Value=".$value.PHP_EOL;
虽然注意$ value仍然是SimpleXMLElement对象,所以如果你需要它作为字符串,你应该使用(string)$value
。在示例中,echo
会自动为您执行转换。