我想将文本字符串“ 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的SimpleXML扩展名仅适用于XML,不适用于HTML。您在设置代码中正确提到了XHTML,但这意味着您需要使用XML自动关闭元素(例如<br />
)而不是HTML未关闭的标签(例如<br>
)。
第二,addChild
方法将文本内容作为其第二个参数,而不是原始文档内容;因此,如您所见,它将自动为您转义<
和>
。
SimpleXML实际上是围绕一种XML进行设计的,XML是一种严格的元素树,而不是一种标记语言,其元素与诸如XHTML之类的文本内容交织在一起,因此,在这种情况下,最好还是坚持使用DOM。 >
恐怕还没有JS的“ innerhtml”属性,因此,我相信您必须将text和br
元素添加为单独的节点,例如
$body = $html->appendChild( $dom->createElement('head') );
$body->appendChild( $dom->createTextNode('hello') );
$body->appendChild( $dom->createElement('br') );
$body->appendChild( $dom->createTextNode('world') );