Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP DOM获取子节点的值_Php_Xml_Dom - Fatal编程技术网

使用PHP DOM获取子节点的值

使用PHP DOM获取子节点的值,php,xml,dom,Php,Xml,Dom,以下是我使用的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

以下是我使用的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>
    ...
我想得到节点“ID”和“DATEMAJ”的值。 我知道如何使用
$test->firstChild->nodeValue>获取“DATEMAJ”值,但不知道如何检索节点“ID”的值。

试试看

$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;
 }
请参见演示使用DOMXpath::evaluate()

警告:XML片段包含多个带有名称空间前缀的属性。因此,XML使用名称空间。这里可能还定义了一个默认名称空间。如果是这种情况,则必须注册并使用该名称空间的名称空间前缀

$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;
 }
$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"
  }
}