![](/img/trans.png)
[英]How to get xml-node with attributes and text content as child at same time with php-soap?
[英]Get XML-node by attribute name
我具有以下XML結構:
<Folder>
<Placemark>
<ExtendedData>
<Data name="Id">
<value>152285415</value>
</Data>
<Data name="Name">
<value>Tester</value>
</Data>
</ExtendedData>
</Placemark>
</Folder>
並且我需要直接通過屬性“ name” =“ Id”訪問-Object的。
所以我嘗試了這個:
$xml->Document->Folder->Placemark->ExtendedData->xpath('data[@name="Id"]')
但這給和空數組。
最后我需要的是“ 152285415”
任何幫助表示贊賞。
這似乎可以完成工作:
<?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;
}
}
您可以使用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
不必擔心文檔的整體層次結構(盡管濫用了很多)是將//作為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
將自動為您進行轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.