2011-03-03 5 views
0

을 dom으로 :PHP로 XML 파일을 조작 나는 다음과 같이 XML 파일이

<?xml version="1.0" encoding="UTF-8"?> 
<root version="8.0.0.0"> 
<songs name="Album"> 
    <row> 
    <song artist="artist_name">Track1</song> 
    </row> 
    <row> 
    <song artist="artist_name">Track2</song> 
    </row> 
    <row> 
    <song artist="artist_name">Track3</song> 
    </row> 
    <row> 
    <song artist="artist_name">Track4</song> 
    </row> 
</songs> 
</root> 

지금 내가 좀 더 행이이 파일을 업데이트 할를. 기존 행 요소 위에 데이터를 추가하는 방법은 무엇입니까? 또한 새로운 요소를 추가하는 동안 Track1, Track2와 같은 트랙을 확인하려고합니다.

현재이 xml 파일을 php : dom으로 조작하고 있지만, 기존 행 맨 아래에 추가하는 데이터입니다. 위의 일을하는 데 사용

PHP 코드는 내가 그것을 할 수있는 방법을 알려 주시기 바랍니다

<?php 
//Creates XML string and XML document using the DOM 
$dom = new DOMDocument(); 
$dom->formatOutput = true; 
$dom->Load('C:/wamp/www/xml/test1.xml'); 

$root = $dom->firstChild; 
$list = $root->childNodes->item(1); 


if(isset($_POST['submit'])){ 

    $artistName = $_POST['name']; 
    $track = $_POST['track']; 
    $row = $dom->createElement('row'); 
    $list->appendChild($row); 
    $song = $dom->createElement('song'); 
    $row->appendChild($song); 
    $song->setAttribute('artist', $artistName); 
    $wcm_node = $dom->createTextNode($track); 
    $song->appendChild($wcm_node); 
} 

// Code to format XML after appending data 
$outXML = $dom->saveXML(); // put string in outXML 

//now create a brand new XML document 
$xml = new DOMDocument(); 
$xml->preserveWhiteSpace = false; 
$xml->formatOutput = true; //yup, going to try to make this format again 
//pass the output of the first bunch of stuff we did to the new XML document: 
$xml->loadXML($outXML); 
//now display the cleanly formatted output without using LIBXML_NOBLANKS (which may have undesired consequences 
$xml->save('test1.xml'); // save as file 

} 

?> 

입니다.를 붙이는하지만 를 추가하지

감사

+2

우리에게 약간의 PHP 코드를 제시해주십시오 – soju

+0

수 DOM도 그 방법을 가지고 있습니다 [PHP XML 삽입 요소 다음에 중복 된 포어) 다른 요소] (http://stackoverflow.com/questions/4723747/php-xml-inserting-element-after-or-before-another-element) – Gordon

답변

2

.

예 (demo) :

$dom = new DOMDocument; 
$dom->loadXml('<rows><row xml:id="r1"/></rows>'); 
$dom->documentElement->insertBefore(
    $dom->createElement('row', 'new row'), 
    $dom->getElementById('r1') 
); 
$dom->formatOutput = TRUE; 
echo $dom->saveXml(); 

출력 :

<?xml version="1.0"?> 
<rows> 
    <row>new row</row> 
    <row xml:id="r1"/> 
</rows> 
+0

안녕하세요 고든 .. 그 이후로 일하지 않는 나는 어떤 이드 그 xml에서 찾아서 추가 할 수 있습니까? <노래 이름 = "앨범"> 뒤에 새 요소를 추가 할 수있는 다른 방법이 있습니까? – techiepark

+1

@techiepark 귀하의 구체적인 마크 업은 부적절합니다. 링크 된 매뉴얼을 보면 "참조 노드"라는 메시지가 표시되므로 이전에 삽입 할 노드를 전달하기 만하면됩니다. 노드를 어떻게 잡는지는 당신에게 달린 것입니다. DOMDocument에서 DOMElement를 반환하는 메서드는 모두 수행합니다. – Gordon

관련 문제