Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Вставить новый узел в XML-документ


Автор: sugee 6.12.2005, 10:38
Вопрос такой: у меня есть xml-файл
Код

<?xml version="1.0"?>
<!DOCTYPE catalog [
<!ELEMENT catalog (cd+)>
<!ELEMENT cd (number,title,artist,tracks)>
<!ELEMENT number (#PCDATA)>
<!ELEMENT title  (#PCDATA)>
<!ELEMENT artist (#PCDATA)>
<!ELEMENT tracks (#PCDATA)>
   ]>
  <catalog>
  <cd>
<number>1</number>
     <title>es jst ein augen blick...</title>
     <artist>endraum</artist>
     <tracks>15</tracks>
  </cd>
  <cd>
     <number>2</number>
     <title>Balance</title>
     <artist>James Holden</artist>
     <tracks>30</tracks>
  </cd>
  <cd>
     <number>3</number>
     <title>Kittenz and Thee</title>
     <artist>Felix Da Housecat</artist>
     <tracks>30</tracks>
  </cd>
  <cd> 
     <number>4</number>
     <title>kommt zusammen</title>
     <artist>2raumwohnung</artist>
     <tracks>13</tracks>
  </cd>
  <cd> 
     <number>6</number>
     <title>Antichrist</title>
     <artist>Das Ich</artist>
     <tracks>10</tracks>
  </cd> 
  <cd> 
     <number>7</number>
     <title>love metal</title>
     <artist>HIM</artist>
     <tracks>16</tracks>
  </cd>
  <cd> 
     <number>8</number>
     <title>consert</title>
     <artist>Volga</artist>
     <tracks>14</tracks>
  </cd>
   <cd> 
     <number>9</number>
     <title>One of 18 angels</title>
     <artist>Diary of Dreams</artist>
     <tracks>11</tracks>
  </cd> 
</catalog>

Я хочу вставить в определённое его место новый узел, т.е. новый CD.
Вот так я пытаюсь вставить его в начало, он всавляется но вместо того узла который раньше был первым, прежний узел удаляется.
Что я не так делаю?
Код

<?
$diski=simplexml_load_file('diski.xml');
                                      
$number="0"; 
$title="26 Mixes for Cash"; 
$artist="Aphex Twin"; 
$tracks="26";

$diski->cd->number=$number; 
$diski->cd->title=$title;
$diski->cd->artist=$artist;
$diski->cd->tracks=$tracks;
echo $diski->asXML(); 
?>

И ещё, как то же самое сделать с помощью стандарта DOM?

Автор: sugee 7.12.2005, 09:47
Уточню вторую часть вопроса, относительно DOM...
Вот я обошел дочерние узлы корневого тега, теперь мне нужно вставить в определённое место, в начало например, новый узел cd со своими значениями дочерних узлов.
Как это делается?

Код

$diski=new domDocument;
$diski->load('diski.xml');
$catalog=$diski->documentElement;
$child=$catalog->childNodes;

for($i=0; $i<$child->length; $i++) {
  $cd=$child->item($i);
  echo $cd->nodeName."=".$cd->nodeValue."<br>";
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)