输出 BR 标签,使用 simpleXML

Output BR tag, using simpleXML

我想将文本字符串 "hello there" 分成两行。 为此,我需要 simpleXML 在输出文件 result.xml 中创建 "br-tag",但我只生成了代码 <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

想要的结果:

你好

首先,PHP 的简单 XML 扩展仅适用于 XML,不适用于 HTML。您在设置代码中正确地提到了 XHTML ,但这意味着您需要使用 XML 自闭合元素,例如 <br /> 而不是 HTML 未闭合标签,例如 <br>.

其次,addChild方法将文本内容作为第二个参数,而不是原始文档内容;所以正如您所见,它会自动为您转义 <>

SimpleXML 确实是围绕 XML 这种严格的元素树设计的,而不是像 XHTML 这样的元素与文本内容交错的标记语言,所以在这种情况下,您最好坚持使用 DOM.

即便如此,恐怕也没有等效的 JS "innerhtml" 属性,所以我相信您必须单独添加文本和 br 元素节点,例如

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

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