Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   PHP работа с DOM(получить последний\первый элемент) (https://javascript.ru/forum/server/15109-php-rabota-s-dom-poluchit-poslednijj%5Cpervyjj-ehlement.html)

bayah 13.02.2011 18:57

PHP работа с DOM(получить последний\первый элемент)
 
Есть такой xml-файл:

Код:

<?xml version="1.0" encoding="windows-1251"?>
<root>
        <theme one="1" two = "2">some_text</theme>
        //...
        <theme>bla bla bla</theme>
</root>

Теперь мне нужно получать последний элемент <theme>. На php я делаю так:

$dom = new DOMDocument("1.0", "windows-1251");
$dom->load("xmlexample1.xml");
$text = $dom->getElementsByTagName('theme')->lastChild->textContent;
echo $text;


В надежде получить на выходу:
bla bla bla
...

уже разобрался - сделал так:


$dom = new DOMDocument("1.0", "windows-1251");
$dom->load("xmlexample1.xml");
$temp = $dom->getElementsByTagName('theme');
$text  =$temp->item($temp->length)->textContent;
echo $text;


Но все же почему не получалось через lastChild? И как это вообще делается по-нормальному?

B@rmaley.e><e 13.02.2011 20:00

А с чего Вы взяли, что у экземпляров класса DOMNodeList существует свойство lastChild?

bayah 14.02.2011 03:41

а разве нет?
подождите, а у какого класса тогда lastChild существует?

bayah 14.02.2011 05:23

а... это свойство конкретно элемента..
ну вроде разобрался, работает

$dom = new DOMDocument("1.0", "windows-1251");
	$dom->load("xmlexample1.xml");
	$temp = $dom->firstChild; //тут получили элемент root
	$text  =$temp->lastChild->textContent; //а тут текст bla bla bla
	echo $text;


кажется разобрался, спасибо

bayah 14.02.2011 06:23

Еще вопрос возник.

Так работает:

$dom = new DOMDocument("1.0", "windows-1251");
$dom->load("xmlexample1.xml");
$root->$dom->documentElement;         
$temp = $dom->firstChild; //тут получили элемент root
$text  =$temp->lastChild->textContent; //а тут текст bla bla bla
echo $text;


А так - нет:

$dom = new DOMDocument("1.0", "windows-1251");
$dom->load("xmlexample1.xml");
$root->$dom->documentElement;         
$text  =$root->lastChild->textContent; 
echo $text;


или я опять что-то путаю?
в этой статье( https://developer.mozilla.org/en/DOM...ocumentElement )
об этом как раз и говориться:
That's why you should use document.documentElement rather than document.firstChild to get the root element.

только у меня получается все наоборот.

B@rmaley.e><e 14.02.2011 17:29

А где Вы инициализируете переменную $root? Я с DOMDocument не работал, но не верю, что конструктор создает новую глобальную переменную.


Часовой пояс GMT +3, время: 20:11.