XML поиск узла из массива и добавление новых данных в новый узел - PullRequest
3 голосов
/ 29 ноября 2011

Из этого урока - раздел «Добавление узлов на PHPFreaks», я опубликовал там, но не получил странных ответов, так как урок был написан ими.

http://www.phpfreaks. .. ndling-XML-данных

Когда я использую свой XML-файл, он создает узел, но не вставляет новые данные. На странице нет ошибок. Я уверен, что только что пропустил что-то очень простое, и после нескольких часов попыток я сейчас преклонюсь и буду просить о помощи.

Это скрипт, который я использую

<?php
// isbn => pages
$page_numbers = array(
                     '1234' => '654', // insert data into catparent node
                     '5678' => '789', // insert data into catparent node
                );
$dom = new DOMDocument();
$dom->load('edtest.xml');
$xpath = new DOMXPath($dom);
$items = $xpath->query('item');
foreach($items as $item)
{
  $item->appendChild($dom->createElement('catparent', $page_numbers[$item->getAttribute('catcode')]));
}
$dom->save('edtest_new.xml');
?>

Мой XML

<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>
<catcode>1234</catcode>
<catdesc>Systems - System Bundles</catdesc>
<price_cost>999.95</price_cost>
<price_sell>999.95</price_sell>
</item>
</items>

Выходной XML

<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>
<catcode>1234</catcode>
<catdesc>Systems - System Bundles</catdesc>
<price_cost>999.95</price_cost>
<price_sell>999.95</price_sell>

<catparent></catparent> // it creates but does not insert required data

</item>
</items>

Запускает скрипт, создает необходимый узел, но не вставляет необходимые данные. Цель сценария - найти <catcode> = 1234 и добавить новый <catparent> </catparent> с необходимыми данными из массива.

Если есть лучший способ достижения результата или просто необходимая коррекция.

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2011

Вы используете $item->getAttribute('catcode'). Однако catcode не является атрибутом <item>, это дочерний элемент.

Попробуйте

$catcode = $item->getElementsByTagName('catcode');
$parent_code  = $page_numbers[ $catcode[0] ];

$item->appendChild( $dom->createElement('catparent', $parent_code) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...