2014-02-19 127 views
4

下面是一個例子XML使用:用PHP DOM獲取子節點的值

<LISTING diffgr:id="LISTING1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
    <ID>ACCAMAQU0470001P</ID> 
    <DATECREA>2013-01-28T09:45:21+01:00</DATECREA> 
    <DATEMAJ>2014-01-09T17:41:25+01:00</DATEMAJ> 
    ... 
    </LISTING> 
    ... 

在PHP代碼,我在這裏:

$document_xml = new DOMDocument(); 
$document_xml->loadXML($retour['any']); 
$elements = $document_xml->getElementsByTagName('LISTING'); 

while ($elements->item($i)) { 
    $element = $elements->item($i); // On obtient le nœud 
    $list = $element->childNodes; // On récupère les nœuds avec childNodes 
    $idtest = $element->getElementsByTagName('DATEMAJ'); 
    $idElem = $element->getElementsByTagName('ID'); 
    foreach($idElem as $idSirtaq){ 
     $idList[] = $idSirtaq->firstChild->nodeValue; 
    }   
    foreach ($idtest as $test) { 
     //HERE 
     ... 
    } 
    ... 
} 

我會得到節點「ID」和「DATEMAJ」的值。 我知道獲得「DATEMAJ」值,與$test->firstChild->nodeValue,但不知道如何檢索節點「ID」的值。

你能幫我嗎? 謝謝!

回答

6

嘗試

$document_xml = new DOMDocument(); 
$document_xml->loadXML($xml); 
$elements = $document_xml->getElementsByTagName('LISTING'); 
foreach ($elements as $node) { 
    $idtest = $node->getElementsByTagName('DATEMAJ'); 
    $idElem = $node->getElementsByTagName('ID'); 
    $idList[] = $idElem->item(0)->nodeValue; 
} 

觀看演示here

2

使用DOMXpath ::評估()。

$xml = <<<'XML' 
<LISTINGS xmlns:diffgr="urn:digggr" xmlns:msdata="urn:msdata"> 
    <LISTING diffgr:id="LISTING1" msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
    <ID>ACCAMAQU0470001P</ID> 
    <DATECREA>2013-01-28T09:45:21+01:00</DATECREA> 
    <DATEMAJ>2014-01-09T17:41:25+01:00</DATEMAJ> 
    </LISTING> 
</LISTINGS> 
XML; 

$dom = new DOMDocument(); 
$dom->loadXml($xml); 
$xpath = new DOMXpath($dom); 

$result = []; 
foreach ($xpath->evaluate('//LISTING') as $listing) { 
    $result[] = [ 
    'ID' => $xpath->evaluate('string(ID)', $listing), 
    'DATEMAJ' => $xpath->evaluate('string(DATEMAJ)', $listing) 
    ]; 
} 

var_dump($result); 

輸出:https://eval.in/103310

array(1) { 
    [0]=> 
    array(2) { 
    ["ID"]=> 
    string(16) "ACCAMAQU0470001P" 
    ["DATEMAJ"]=> 
    string(25) "2014-01-09T17:41:25+01:00" 
    } 
} 

警告:您的XML片段包含與命名空間前綴幾個屬性。所以XML使用的是名稱空間。它也可能是這裏定義的默認名稱空間。如果是這種情況,則必須註冊和使用該名稱空間的名稱空間前綴。