Вы можете использовать saveHTML
метод DOMDocument
для сериализации узла как HTML, в вашем случае вы, кажется, хотите вызвать его на каждом дочернем узле выбранного узла и объединить строки;в API-интерфейсе DOM браузера, который будет называться innerHTML
, поэтому я написал для этого функцию с таким именем, а также использовал возможность вызова функций PHP из XPath в следующем фрагменте:
<?php
$xml = <<<'EOD'
<Description>
<CompleteText>
<DetailTxt>
<Text>
<span>Here there is some text</span>
<h2>And maybe a headline</h2>
<br/>
<span>Normal position</span>
<br/>
<span> </span>
<br/>
</Text>
</DetailTxt>
</CompleteText>
</Description>
EOD;
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXPath($doc);
function innerHTML($nodeList) {
$node = $nodeList[0];
$html = '';
$containingDoc = $node->ownerDocument;
foreach ($node->childNodes as $child) {
$html .= $containingDoc->saveHTML($child);
}
return $html;
}
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions("innerHTML");
$innerHTML = $xpath->evaluate('php:function("innerHTML", /Description/CompleteText/DetailTxt/Text)');
echo $innerHTML;
Вывести какhttp://sandbox.onlinephpfunctions.com/code/62a980e2d2a2485c2648e16fc647a6bd6ff5620b -
<span>Here there is some text</span>
<h2>And maybe a headline</h2>
<br>
<span>Normal position</span>
<br>
<span> </span>
<br>