2014-02-19 53 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使用的是名称空间。它也可能是这里定义的默认名称空间。如果是这种情况,则必须注册和使用该名称空间的名称空间前缀。