2011-08-20 3 views
0
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> 

답변

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
$txtNode = $xdoc ->createTextNode ($str); 

텍스트를 요청했습니다. 텍스트는 무엇입니까? &lt;은 리터럴 왼쪽 꺾쇠 괄호 문자를 의미합니다.

브라우저에 innerHTML을 설정하는 것과 같이 원시 마크 업을 문서에 삽입하려면 새 문서를 만들고 마크 업을로드 한 다음 결과 DOM 노드를 대상 문서로 가져와야합니다. 방법은 this question을 참조하십시오. 그러나

은 그래서 XML을 잘 형성되지 않은 것

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

는 XML 문서의 마크 업에 포함 할 수 없습니다. 임의의 HTML을 XML 파일에 저장하는 경우 텍스트 내용으로 처리해야합니다. XHTML을 사용하지 않는 한 HTML 마크 업과 XML 마크 업이 동일하지 않기 때문입니다.

관련 문제