簡體   English   中英

通過屬性名稱獲取XML節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM