2010-07-29 2 views
0

Поскольку я новичок в xml, я попробовал the code over here, чтобы вставить данные в xml, который работает. Но я хотел бы вставить несколько данных в xml. как я могу это достичь? например:Вставить несколько данных в xml с php dom

<root> 
<no>1</no> 
<activity>swimming</activity> 
<date>29/7/2010</date> 
<others> 
    <data1>data1</data1> 
    <data2>data2</data2> 
    <data3>data3</data3> 
    so on.. 
</others> 
<no>2</no> 
<activity>sleeping</activity> 
<date>29/7/2010</date> 
<others> 
    <data1>data1</data1> 
    <data2>data2</data2> 
    <data3>data3</data3> 
    so on.. 
</others> 
</root> 

index.php:

<?php 

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml', LIBXML_NOBLANKS); 

    $activities = $xmldoc->firstChild->firstChild; 
    if($activities != null){ 
      while($activities != null){ 
          ?> 
      <div id="xml"> 
       <span> 
       <?php echo $activities->textContent ?> </span> <br /> 

      </div> 
         <?php 
         $activities = $activities->nextSibling; 
      } 
     } 
?> 

<body> 
<form name="input" action="insert.php" method="post"> 
    Insert Activity: 
    <input type="text" name="activity" /> 
    <input type="submit" value="Send" /> 
</form> 
</body> 
</html> 

insert.php:

<?php 
    header("Location: index.php"); 

    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 
    $newAct = $_POST['activity']; 

    $root = $xmldoc->firstChild; 
    $newElement = $xmldoc->createElement('activity'); 
    $root->appendChild($newElement); 
    $newText = $xmldoc->createTextNode($newAct); 
    $newElement->appendChild($newText); 
    $xmldoc->save('sample.xml'); 

?> 

приведенный выше код вставляет только один узел. я хотел бы знать, как вставлять несколько узлов и дочерние узлы

+0

Каков ваш вопрос или что не работает? Пожалуйста, добавьте еще несколько объяснений. – Gordon

+0

приведенный выше код вставляет только один узел. я хотел бы знать, как вставить несколько узлов и дочерние узлы. – input

ответ

2

Если вы имеете в виду «как вставлять сразу несколько узлов в один вызов метода», ответ таков: невозможно.

Подход с DOM всегда один и тот же: создайте узел и добавьте его где-нибудь. По одному.

В приведенном выше примере вы можете опустить создание TextNode и добавить содержимое строки в качестве второго аргумента в createNode. Однако это не будет использовать автоматическое экранирование и сущность.

Номер модели: макс. Номер: DOMDocumentFragment::appendXML. Для ввода потребуется произвольная строка XML. Однако это нестандартно.