Archive for the ‘XPath’ Category

Получение пути через DOMXPath

Wednesday, December 10th, 2008
$a = "<body><head><title>Page Title</title></head></body>";
$dom = new DOMDocument('1.0', 'utf-8');
$dom->preserveWhiteSpace = false;
$dom->loadXML($a);
$xpath = new DOMXPath($dom);
$arts = $xpath->query("/body/head/title");

foreach($arts as $art) {
    echo $art->nodeName . " - " . $art->nodeValue . "<br />";
}

XPath

Friday, January 25th, 2008

XPath (XML Path Language) является языком для обращения к частям XML-документа.

Вместе с DOMDocument, XPath, позволяет очень быстро извлекать данные из XML документа. Для примера берем документ XML.html. Теперь посчитаем сколько книг у каждого автора, они конечно написали намного больше, пусть это будет список книг этих авторов изданых неким издательством.
Можно конечно используя только DOMDocument, выполнить эту задачу. Но у нас есть XPath, так пусть поработает.

// загружаем документ
$dom = new DOMDocument;
$dom->load('books.xml');

// объявляем DOMXPath
$xpath = new DOMXPath($dom);

// получает масив авторов
$autors = $dom->getElementsByTagName('autor');

// создаем DOMXPath запрос подсчитать теги book
$query = 'count(book)';

// пропускаем через рекрусию
foreach($autors as $autor){
	$books = $xpath->evaluate($query, $autor);
	echo $autor->getAttribute('name') . " - " . $books ;
}

И вот результат

Robert Sheckley - 2
Isaac Asimov - 2
Ray Bradbury - 2
Frank Patrick Herbert - 1