[输出BR标签,使用simpleXML

问题描述 投票:0回答:1

我想将文本字符串“ 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

想要的结果:

你好

那里

newline simplexml domdocument php-7.3
1个回答
0
投票

首先,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') );
© www.soinside.com 2019 - 2024. All rights reserved.