我在html文件中创建标签,但特殊字符转换为其代码

时间:2011-08-20 09:30:42

标签: php xml

php part

<?php
    $f = fopen( "temp.xml","r" );
    $str = "";
    while( $line = fgets($f) ){
        if( !($line[1]=='?' || $line[1]=='b' || $line[2]=='b') ){
            $str.= $line."<br>";
        }
    }
    fclose( $f );

    $xdoc = new DomDocument;
    $xdoc->Load('text.xml');
    $body = $xdoc->getElementsByTagName('textBody')->item(0);

    $txtNode = $xdoc ->createTextNode ( $str );
    $body -> appendChild($txtNode);

    $test = $xdoc->save("text.xml");
?>

xml file updated.

<textBody>      
    &lt;br&gt;          
    &lt;br&gt; &amp;#13;
    &lt;br&gt;&lt;font&gt;Heading Here...&lt;/font&gt;&amp;#13;
    &lt;br&gt;&lt;font&gt;Text Here...&lt;/font&gt;&amp;#13;
    &lt;br&gt;
</textBody>



I want to create child in xml file but the special characters are converted into their codes as shown above.
I want the output as

<br><br>
<br><font>Heading Here </font>
<br><font>Text Here</font>
<br>

2 个答案:

答案 0 :(得分:1)

textNode仅包含字符数据。

如果您想创建并插入包含多个元素节点的片段,请使用DOMDocument::createDocumentFragment

$xdoc = new DomDocument;
$xdoc->Load('text.xml');
$body = $xdoc->getElementsByTagName('textBody')->item(0);

$fragment = $xdoc ->createDocumentFragment ();
$fragment->appendXML( $str );
$body -> appendChild($fragment);

请注意: appendXML()不是DOM的一部分,它是一个PHP实现。

如果您希望以“干净”的DOM方式执行此操作,请创建新文档,使用loadXML()加载字符串并将结果导入到其他文档中。

答案 1 :(得分:1)

$txtNode = $xdoc ->createTextNode ( $str );

你已经要求提供一些文字了,你得到的是文字。 &lt;表示文字左角括号字符。

如果要将原始标记插入到文档中,例如在浏览器中设置innerHTML,则必须创建新文档,将标记加载到其中,然后将生成的DOM节点导入到目标中文献。有关如何执行此操作,请参阅this question

然而:

<textBody>
    <br><br>
    ...
</textBody>

这不是格式良好的XML,因此不能作为标记包含在XML文档中。如果要在XML文件中存储任意HTML,则应继续将其作为文本内容进行,因为HTML标记与XML标记不同(除非您使用的是XHTML)。