Вывести тег BR, используя simpleXML - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу, чтобы текстовая строка "hello there" была разделена на 2 строки. Для этого мне нужен простой XML для создания "br-тега" в результате в выходном файле. xml, но я получаю только код <br>.

<?php

// DOMDocument

$dom = new DomDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

$html = $dom->appendChild($dom->createElement("html"));

$xmlns = $dom->createAttribute('xmlns');
$xmlns->value = 'http://www.w3.org/1999/xhtml';
$html->appendChild($xmlns);

// SimpleXML

$sxe = simplexml_import_dom($dom);
$head = $sxe->addChild('head', ' ');
$body = $sxe->addChild('body', 'hello <br> there');

echo $sxe->asXML('result.xml');

Результат:

hello <br> there

Требуется результат:

привет

там

1 Ответ

1 голос
/ 27 апреля 2020

Во-первых, расширение PHP Simple XML работает только с XML, а не HTML. Вы справедливо упоминаете X HTML в своем коде установки, но это означает, что вам нужно использовать XML самозакрывающиеся элементы, такие как <br />, а не HTML незамкнутые теги, такие как <br>.

Во-вторых метод addChild принимает текстовое содержимое в качестве второго параметра, а не необработанное содержимое документа ; так что, как вы уже видели, он автоматически выйдет за пределы < и >.

Простой XML действительно разработан вокруг вида XML, который является строгим деревом элементов, а не язык разметки с элементами, чередующимися с текстовым содержимым, таким как X HTML, так что это, вероятно, тот случай, когда вам лучше придерживаться DOM.

Даже тогда нет эквивалента JS " боюсь, внутреннее свойство html ", поэтому я считаю, что вам придется добавить текст и элемент br в виде отдельных узлов, например

$body = $html->appendChild( $dom->createElement('head') );

$body->appendChild( $dom->createTextNode('hello') );
$body->appendChild( $dom->createElement('br') );
$body->appendChild( $dom->createTextNode('world') );
...