Я пытаюсь разобрать .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 пробела, и, таким образом, положение слов будет неправильным.
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
"
Других решений пока нет …