|
|
|
Forum Guru
      
участник
Last Login: 25.11.2007 22:43
Сообщ.: 61,
Visits: 674
|
|
В xml-шаблоне, показанном ниже, мне нужно изменить по определённому действию пользователя атрибут src тега img. Так как у тега img есть id логично было бы добираться до него так$col = $document->getElementById($id); а потом применять replaceAttribute, но replaceAttribute вызывает ошибку Call to a member function replaceAttribute() on a non-object Как это сделать правильно? Вот шаблон <MENU> <TABLE cellSpacing=0 cellPadding=4 width="100%"> <TBODY> <TR height=50> <TD align=left width="20%" background=./backgrounds/ser14.gif><A href=""><IMG id=0 src="item1.gif" border=0></A></TD> <TD align=left width="20%" background=./backgrounds/ser14.gif><A href=""><IMG id=1 src="item2.gif" border=0></A></TD> <TD align=left width="20%" background=./backgrounds/ser14.gif><A href=""><IMG id=2 src="item3.gif" border=0></A></TD> <TD align=left width="20%" background=./backgrounds/ser14.gif><A href=""><IMG id=3 src="item4.gif" border=0></A></TD> <TD align=left width="20%" background=./backgrounds/ser14.gif><A href=""><IMG id=4 src="item5.gif" border=0></A></TD> </TR> </TBODY> </TABLE> </MENU> Дерево xml-документа я получаю так
define('XMLHead', "<?xml version=\"1.0\" encoding=\"Windows-1251\" ?>"); $document = new domDocument("Windows-1251"); $menu = file_get_contents("../templates/top_menu.html"); //это тот самый xml $menu_doc = XMLHead.$menu; $document->loadXML($menu_doc);Прошу прощения, но запостить xml не смог :(
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| sugee, я исправил твое сообщение так чтобы XML правильно отображался. На будущее имей в виду, если у тебя не отображаются теги, то замени вручную у них < на <, > на > и все будет в порядке. Что касается сути вопроса, то надо понимать что id атрибут сам по себе для XML является таким же атрибутом как и все остальные. Чтобы XML начал воспринимать его его как уникальный id и, соответстветнно, могла работать функция getElementById, надо сделать DTD для документа или XML-схему где указать, что атрибут id тега <img> является уникальным идентификатором. Кроме того, значение id в xml не может начинаться с цифры.
|
|
|
|
|
Forum Guru
      
участник
Last Login: 25.11.2007 22:43
Сообщ.: 61,
Visits: 674
|
|
Это понял, спасибо.
А вот изменить атрибут так и не получается.
Я не стал писать DTD, добираюсь до нужной ноды так:
$img = $document->getElementsByTagName("img");
for ($i=0; $i < $img->length; $i++) {
$ob = $img->item($i);
$attr = $ob->attributes;
if ($attr->getNamedItem("id")->nodeValue == $id) {
//тег img который мне нужен
}
Насчёт метода replaceAttribute я погорячился, не помню откуда я его взял, но похоже в PHP такого нет, во всяком случае поиск по php.net не дал результатов.
Так как же всё-таки изменить значение атрибута?
Вообще замысел такой, по определённому действию пользователя значение атрибута изменяется на выбранное им, и это изменение должно быть
не только показано в браузере но и сохранено в xml-файле.
Сохранение, как я понимаю, реализуется через метод saveXML и перезапись файла строкой, которую возвращает этот метод.
Таким же образом можно будет менять url в ссылках и т.п.
Но для начала нужно понять, как редактировать атрибуты.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Ты пользуешься классом domDocument. Изучай список его свойств и методов.
|
|
|
|