Я использую библиотеку php DOMDocument и читаю XML-строку с loadXML .Затем я перебираю дочерние элементы узла, помеченного «Info», с таким кодом:
$doc = new \DOMDocument();
$doc->loadXML(
'<?xml version="1.0" encoding="UTF-8"?>
<GAEB xmlns="http://www.gaeb.de/GAEB_DA_XML/DA31/3.2">
<Info>
<Version>3.2</Version>
<VersDate>2013-10</VersDate>
<Date>2014-10-10</Date>
<Time>12:28:28</Time>
<ProgSystem>GAEB Zertifizierung</ProgSystem>
<ProgName>BVBS</ProgName>
</Info>
</GAEB>'
);
$Info = $doc->getElementsByTagName("Info");
foreach ($Info as $element) {
echo "[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo "[" . $node->nodeName . "]";
echo $node->nodeValue;
}
}
У этого узла 6 дочерних узлов, однако в итерации 13 запусков.Это потому, что есть пробельные символы, которые интерпретируются как Текстовые узлы .Если я посмотрю на каждый узел $node->nodeType
, он покажет 1
для 6 реальных дочерних элементов и 3
для 7 дочерних элементов, содержимое которых равно \n
.Вопрос в том, как мне с этим бороться?Это нормально, что DOMDocument содержит эти текстовые узлы, и я должен «продолжить» над ними что-то вроде if($node->nodeType===3) continue
, или я бы попытался удалить эти пробелы ранее при загрузке XML.Простое удаление \n
из входного xml не работает, потому что тогда пробелы между узлами (например, > <
) интерпретируются как текстовые узлы.
образец файла
<?xml version="1.0" encoding="UTF-8"?>
<GAEB xmlns="http://www.gaeb.de/GAEB_DA_XML/DA31/3.2">
<Info>
<Version>3.2</Version>
<VersDate>2013-10</VersDate>
<Date>2014-10-10</Date>
<Time>12:28:28</Time>
<ProgSystem>GAEB Zertifizierung</ProgSystem>
<ProgName>BVBS</ProgName>
</Info>
</GAEB>