поиск по атрибутам

  • Автор темы Igor Ageyev
  • Дата начала

Igor Ageyev

Guest
поиск по атрибутам

Кто нибудь встречал простой алгоритм решения следующей задачи? (c использованием domxml из php 4)

Выполнение поиска узла по атбибуту и после успешного нахождения, добавление в него дочернего элемента.

В форуме похожие посты были, но они мне не помогли. Все сводилось к тому, что идут советы использовать классы, не обновляющиеся с 2000го года.
 

neko

tеam neko
мама мия этож писать целых 3 строчки
рекурсию по каталогам с поиском файла делали?
вот и воспроизведите
 

Igor Ageyev

Guest
Проблема в том, что я малейшего представления не имею об xpath-поиске и объекте xpath_new_context.

Решение же задачи исключительно силами DomDocument и DomElement для меня не вызывает затруднений, но кажется мне не элегантным.

Спасибо за ссылки. Разберусь;)
 

slach

Новичок
ну почитайте www.zvon.org - XPath Tutorial, быстро разберетесь
а насчет свойств и т.п. помогает var_dump
 

Qasimodo

Новичок
Re: поиск по атрибутам

Автор оригинала: Igor Ageyev
Кто нибудь встречал простой алгоритм решения следующей задачи? (c использованием domxml из php 4)

Выполнение поиска узла по атбибуту и после успешного нахождения, добавление в него дочернего элемента.
Объявить аттрибут как ID и найти его, исспользуя
PHP:
DomDocument::get_element_by_id()
 

Igor Ageyev

Guest
Если верить документации get_element_by_id использует тот же xpath.

Все таки надо восполнять пробел по x-технологиям;) Еще раз спасибо slach за ссылки.

-~{}~ 26.10.04 20:53:

Разобрался;)
А для потомков решил тестовый код выложить:
PHP:
<?php
/*
* @description функция добавляет к искомым узлам элемент <test>Hello world!</test>
* @param   $xmldata  (String) xml документ в виде текста
* @param   $myPath  (String) собственно xpath-поиск
*/
function addTest ($xmldata, $myPath){
	// извлекаем данные из файла
	$xml = domxml_open_mem($xmldata);
	$xpath = xpath_new_context($xml);
	$xpresult = xpath_eval_expression($xpath, $myPath);
	foreach ($xpresult->nodeset as $node){
		$newNode= $xml->create_element("test");
   		$newNode = $node->append_child($newNode);
		$newText = $xml->create_text_node("Hello world!");
		$newText = $newNode->append_child($newText);
	}
	return $xml->dump_mem(true);
}

// использование
$myXml = "<?xml version='1.0'?>
<source>
	<item name='bye-bye'></item>
	<item name='hello'></item>
	<item name='bye-bye'></item>
</source>";
echo "<h3>Исходный документ</h3><pre>".htmlentities($myXml)."</pre>";
$myXml = addTest($myXml, "/source/item[@name='hello']");
echo "<hr><h3>После функции</h3><pre>".htmlentities($myXml)."</pre>";

?>
 
Сверху