2013-12-17 8 views
0

Допустим, у меня есть уже есть XML-файл, который я загрузить, как это:Добавить ребенка к конкретному узлу

$domtree = new DOMDocument('1.0', 'UTF-8'); 
$domtree->load('test.xml'); 

файл XML имеет структуру, как это:

<software> 
    <info> 
     <version>6.3</version> 
    </info> 
    <some_stuff> 
     <test1> 
      <somedata>adsd</somedata> 
     </test1> 
    </some_stuff> 
</software> 

Как я могу добавить новый элемент для расшифровки?

Я пробовал:

$some_stuff = $domtree->getElementsByTagName('software'); 
$some_stuff = $some_stuff->getElementsByTagName('some_stuff'); 
$funcgroup = $some_stuff->appendChild($domtree->createElement('test2')); 

PHP Ошибка:

Call to undefined method DOMNodeList::getElementsByTagName() 

ответ

0

Редакцией: Я был на неправильном решении ...

$domtree Ваш объект. Вы не можете установить значение $some_stuff и использовать его как объект. Вот почему вы получаете неопределенную ошибку метода.

Этот код будет работать (хотя это не совсем достичь того, чего вы хотите, я думаю):

$domtree->loadXML(file_get_contents('test.xml')); 
$some_stuff = $domtree->getElementsByTagName('software'); 
$some_stuff = $domtree->getElementsByTagName('some_stuff'); 
$funcgroup = $domtree->appendChild($domtree->createElement('test2')); 

Обратите внимание, как я ссылки на $domtree объект в каждой строке, а не переменные, которые вы устанавливаете.

+0

Тогда я получаю: 'Не определено свойство: DOMNodeList :: $ documentElement' – Michael

1

Этот код будет работать

$domtree = new \DomDocument("1.0","UTF-8"); 
      $xmlfile = "test.xml"; 
      $domtree->load($xmlfile); 
      $xml_stuff   = $domtree->getElementsByTagName('some_stuff')-> item(0) ; 
      $xmlNode1   = $domtree->createElement('test2'); 
      $xmlNode1   = $xml_stuff->appendChild($xmlNode1); 
      $domtree->preserveWhiteSpace = false; 
      $domtree->FormatOutput=true; 
      $domtree->saveXML(); 
      $domtree->save($xmlfile); 
Смежные вопросы