[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Разборка XML с помощью DOM
DIMAstudent
Здравствуйте уважаемые. В PHP я новенький, пытаюсь изучать постепенно. Имеется файл следующего содержания:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="">
<shop>
<categories>
<category
id="1116129">Безопасность</category>
<category
id="1116169-8241" parentId="1116129">Охрана</category>
<category
id="1119725" parentId="1116169">Видеокамеры</category>
<category
id="1116384" parentId="1116169">Накопители</category>
<category
id="1118196" parentId="1116169">Накидки</category>
<category
id="1116137" parentId="1116129">Устройства</category>
<category
id="1116141-7034" parentId="1116126">Аксессуары</category>
<category
id="1116210-8150" parentId="1116141">Дополнительно</category>
</categories>
</shop>
</yml_catalog>

Начал изучать DOM. Попробывал вывести из него данные, написал следующее
$doc_feed = DOMDocument::load('./analogy/kid_ozon_neopod.xml');
$elem_channel = $doc_feed->firstChild;
print $elem_channel->nodeName;

Выводит 'yml_catalog', nodeName выводит название тега.
Вопрос 1. Как вывести через print категорию 'Накопители'?
Вопрос 2. Помогите призвести замену '7034' на другое число.



Спустя 28 минут, 3 секунды (3.03.2011 - 18:06) linker написал(а):
$doc_feed = DOMDocument::load('./analogy/kid_ozon_neopod.xml');
$xpath = new DOMXPath($doc_feed);
$nodes = $xpath->query('//yml_catalog/shop/categories/category[@id="1116384"]');
...

Спустя 18 минут, 29 секунд (3.03.2011 - 18:24) DIMAstudent написал(а):
linker попробывал ваш код:

$doc_feed = DOMDocument::load('./analogy/kid_ozon_neopod.xml');
$xpath = new DOMXPath($doc_feed);
$nodes = $xpath->query('//yml_catalog/shop/categories/category[@id="1116384"]');

попробывал добавить для вывода
print $nodes->nodeValue;
или
print $nodes;
, но ничего невыводит.

Спустя 3 часа, 4 минуты, 49 секунд (3.03.2011 - 21:29) linker написал(а):
$xpath->query('//yml_catalog/shop/categories/category[@id="1116384"]');
Возвращает объект класса DOMNodeList - список объектов класса DOMElement. Поэтому
echo $nodes->item(0)->nodeValue;
можно циклом
foreach($nodes as $node)
echo $node->nodeValue;

Спустя 2 дня, 9 часов, 51 минута, 5 секунд (6.03.2011 - 07:20) DIMAstudent написал(а):
Всех с маслянницей. Спасибо огромное linker за помощь. Нарыл информацию о работе функции simplexml_load_file с XML документом, оказалось еще проще с ней работать чем с DOMDocument.

$xml = simplexml_load_file('./analogy/kid_ozon_neopod.xml');
foreach ($xml->xpath('//category') as $category) {
echo "<h2>". $category['id']. "</h2>";
if ($category['id'] == 7034) {
$category['id'] = 12345;
}
}

$xml->asXML('./analogy/kid_ozon_neopod.xml');

Здесь и замену мы сделаем категории 7034 на нужную. Было бы конечно неплохо указать в
'//category'
на необходимую, тоесть типа
'//category[7034]'
, но такая запись естественно не работает. Может кто-то знает как это записать в
foreach ($xml->xpath('//category') as $category)
.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.