python xml.dom.minidom.Attr вопрос - PullRequest
3 голосов
/ 07 мая 2010

Получение атрибутов с использованием minidom в Python, один использует свойство "attribute".например, node.attributes["id"].value

Так что, если у меня есть <a id="foo"></a>, это должно дать мне "foo".node.attributes["id"] не возвращает значение именованного атрибута, но экземпляр xml.dom.minidom.Attr.Но, глядя на справку для Attr, выполнив help('xml.dom.minidom.Attr'), нигде не упоминается это магическое свойство "value".Мне нравится изучать API, просматривая иерархию типов, методы экземпляров и т. Д. Откуда появилось это свойство "value" ??Почему он не указан на странице Attr class?Упоминаются только дескрипторы данных isId, localName и schemaType.Его также не унаследовали от каких-либо суперклассов.Раз уж я новичок в Python, могут ли некоторые гуру Python просветить?

Ответы [ 2 ]

4 голосов
/ 07 мая 2010

minidom - это просто реализация интерфейсов xml.dom, поэтому любые документы, специально относящиеся к minidom, будут касаться только его особенностей или ограничений, касающихся только xml.dom.

В xml.dom документах по Аттр говорят, и я цитирую:

Attr наследуется от Node, поэтому наследуется все его атрибуты.

Документы на Узле на самом деле называют атрибут по-разному: nodeValue. Но, действительно ...:

>>> import xml.dom.minidom as xdm
>>> dom = xdm.parseString('<foo bar="baz"/>')
>>> root = dom.documentElement
>>> atr = root.getAttributeNode('bar')
>>> atr.nodeValue
u'baz'

Тот факт, что задокументированный атрибут nodeValue имеет псевдоним _un_documented value, может считаться неудачным, но вы всегда можете придерживаться документированного и, следовательно, вправо , имени атрибута, nodeValue , Да, это многословно, но тогда все равно minidom, а также медленнее, чем превосходное xml.etree.ElementTree (особенно в реализации C последнего, xml.etree.cElementTree), так что, вероятно, если вы решите использовать minidom это должно быть потому, что вам нравится обширное многословие ...; -).

0 голосов
/ 07 мая 2010

Боже, никогда раньше этого не замечал. Ты не шутишь, node.value нигде не упоминается. Это определенно устанавливается в коде, хотя в def __setitem__ в xml.dom.minidom.

Не уверен, что сказать, кроме, похоже, вам придется использовать это.

...