2008-10-27 2 views
1

У меня есть объект DOMNode, который имеет некоторые атрибуты. $ Node-> - это DOMNamedNodeMap, который не имеет методов для удаления одной из записей на карте. Класс DOMNode также не имеет методов для удаления атрибутов из элемента. Я просмотрел ряд других связанных классов, и ни один из них, похоже, не предоставляет механизм для удаления узла атрибута из его родителя. (DOMNode :: RemoveChild не работает, он бросает «Не найдена ошибка», если я прохожу объект DOMAttr к нему.)PHP: Удаление атрибута из объекта DOMNode

Помимо строительства нового DOMNamedNodeMap и добавляя все атрибуты к ней кроме тот, Я не хочу ... никаких идей? Благодарю.

ответ

3

Если у вас есть DOMNode, который имеет некоторые атрибуты, он должен быть DOMElement. В этом случае вы можете позвонить по телефону removeAttribute/removeAttributeNS/removeAttributeNode.

Это несколько любопытно, что DOMNamedNodeMap документы РНР getNamedItem[NS], но не признает существование setNamedItem[NS] и removeNamedItem[NS], который был бы еще один способ сделать это.

DOMNode::removeChild не может работать, потому что DOMAttr не является потомком другого DOMNode; ‘attributes’ является отдельное пространство для childNodes. Вы также не можете создать новый NamedNodeMap самостоятельно, чтобы записать его в DOMNode::attributes, так как это свойство только для чтения.

+1

Это было! Спасибо. Я еще не убедился, что DOMNode также будет DOMElement. Это то, что я получаю за то, что не использовал ReflectionClass :: export() достаточно :) – dirtside 2008-10-27 16:20:45

Смежные вопросы