2011-03-03 19 views
0

とxmlファイル操作します:は、私は以下のようにXMLファイルを持っているPHPとDOM

<?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のようなトラックをチェックしたいのですが重複しません。

現在、私はphp:domでこのxmlファイルを操作していますが、既存の行の最後に追加するデータです。上記のことを行うために使用される

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

こんにちはゴードン..それ以来、私はいけない任意のIDそのxmlを見つけて追加しますか? の後ろに新しい要素を追加するために何かできることはありますか? – techiepark

+1

@techieparkあなたの具体的なマークアップは無関係です。リンクされたマニュアルを見ると、 "reference node"と表示されますので、新しい要素を挿入したいノードを渡すだけです。そのノードをどのように保持するかはあなた次第です。 DOMDocumentからDOMElementを返すすべてのメソッドが行います。 – Gordon

関連する問題