以下是我使用的示例XML:
<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”的值。
我知道使用$test->firstChild->nodeValue
获取“DATEMAJ”值,但不知道如何检索节点“ID”的值。
答案 0 :(得分:10)
尝试
$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
答案 1 :(得分:2)
使用DOMXpath :: evaluate()。
$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);
array(1) {
[0]=>
array(2) {
["ID"]=>
string(16) "ACCAMAQU0470001P"
["DATEMAJ"]=>
string(25) "2014-01-09T17:41:25+01:00"
}
}
警告:您的XML片段包含几个带有名称空间前缀的属性。所以XML使用名称空间。这可能是这里定义的默认命名空间。如果是这种情况,则必须注册并使用该命名空间的名称空间前缀。