У меня есть объект DOMNode с некоторыми атрибутами. $Node->attributes - это DOMNamedNodeMap, в котором нет методов удаления одной из записей на карте. Класс DOMNode также не имеет методов для удаления атрибутов из элемента. Я просмотрел ряд других связанных классов, и ни один из них, похоже, не предоставляет механизма для удаления узла атрибута из его родительского элемента.
DOMNode::removeChild не работает; он выдает ошибку «Не найдено», если я передаю ему объект DOMAttr.
Помимо создания нового DOMNamedNodeMap и добавления к нему всех атрибутов Кроме тот, который мне не нужен ... какие-нибудь идеи? Спасибо.






Если у вас есть DOMNode с некоторыми атрибутами, это должен быть DOMElement. В этом случае вы сможете вызвать по нему в removeAttribute/removeAttributeNS/removeAttributeNode.
Несколько любопытно, что DOMNamedNodeMap PHP документирует getNamedItem[NS], но не признает существование setNamedItem[NS] и removeNamedItem[NS], что было бы другим способом сделать это.
DOMNode::removeChild не может работать, потому что DOMAttr не является потомком другого DOMNode; ‘attributes’, это отдельное пространство для childNodes. Вы также не можете создать новый NamedNodeMap для записи в DOMNode::attributes, поскольку это свойство только для чтения.
Вот и все! Спасибо. Я еще не догадывался, что DOMNode также будет DOMElement. Вот что я получаю за то, что недостаточно использовал ReflectionClass :: export () :)