Анализ файлов DITA / XML с узлами, инкапсулированными в текст, в переполнении стека

Я пытаюсь разобрать .dita файл, но есть узел внутри другого узла, и, хотя это не странно, на самом деле текст, окружающий внутренний узел, выглядит примерно так:

<node>
Hello this is a <xlink src="example.com">LINK</xlink> that you may click
</node>

Я могу получить текст от node и я могу получить все экземпляры xlinkТем не менее, текст из node будет выглядеть так:

Hello this is a  that you may click

Как видите, слово LINK отсутствует, и хотя я могу позвонить xlink узел и получить массив, содержащий слово LINKДо сих пор не было возможности поместить слова обратно, так как их положение неизвестно.

Я должен добавить, что проверка на 2 пробела не будет работать, так как в исходном тексте также может быть 2 пробела, и, таким образом, положение слов будет неправильным.

0

Решение

DOMElement::$textContent содержит текстовое содержимое всех узлов-потомков.

Если вы выбираете значения через выражение Xpath, вы можете использовать string() функция для приведения первого узла в строку — возвращает его текстовое содержимое.

$xml = <<<'XML'
<node>
Hello this is a <xlink src="example.com">LINK</xlink> that you may click
</node>
XML;

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

// access the text conent of the node element
var_dump($document->documentElement->textContent);

// use Xpath string() function
var_dump($xpath->evaluate('string(self::node)', $document->documentElement));

Выход:

string(45) "Hello this is a LINK that you may click
"string(45) "Hello this is a LINK that you may click
"
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]