Python 以编程方式获取节点节点类型列表(xml.dom.minidom.Node)

Python 以编程方式获取节点节点类型列表(xml.dom.minidom.Node),python,dom,Python,Dom,因此,我意识到文档中有节点类的节点类型列表,但通过四处查看,我似乎找不到一种方法来以编程方式获得给定节点对象的可用nodeTypes列表(除了检查类,提取每个名称以“node”结尾的all caps成员,然后按值排序)。有什么方法可以做到这一点吗?我希望有更好的方法,但没有更好的方法,我创建了一个新模块: from xml.dom import Node from collections import OrderedDict if not hasattr(Node, 'get_all_node

因此,我意识到文档中有节点类的节点类型列表,但通过四处查看,我似乎找不到一种方法来以编程方式获得给定节点对象的可用
nodeType
s列表(除了检查类,提取每个名称以“node”结尾的all caps成员,然后按值排序)。有什么方法可以做到这一点吗?

我希望有更好的方法,但没有更好的方法,我创建了一个新模块:

from xml.dom import Node
from collections import OrderedDict

if not hasattr(Node, 'get_all_node_types'):

    @classmethod
    def get_all_node_types(cls, refresh=False):

        if not hasattr(cls, '_type_dict') or refresh:
            unsorted_types = {getattr(cls, name) : name for name in dir(cls) if name.endswith('_NODE')}
            cls._type_dict = OrderedDict(sorted(unsorted_types.items(), key = lambda t : t[0]))
        return cls._type_dict

    setattr(Node, 'get_all_node_types', get_all_node_types)

它很粗糙,所以我不太喜欢它,但只要在程序执行期间至少导入一次,我就会得到我的新方法。

我建议您删除nodeType as标记。我想这是关于xml.dom.minidom的。所以xml.dom应该很好,您在寻找它们的数值吗?它们是@thg435不,我是说用另一种方式映射。我知道常量是命名的类成员,但是Node.nodeType返回一个int,所以如果您想让nodeType成为可读的,您需要一种方便的方法将索引映射回名称。我希望有这样的内置功能,但它看起来不是。如果我知道一种机制,可以作为一个说明性的代码示例,我就不会一开始就提出这个问题。此外,我已经提供了一个我试图避免的解决方案的示例作为下面的答案。对于任何想要列表的人,这里的输出格式为JSON:
{“1”:“ELEMENT\u NODE”,“2”:“ATTRIBUTE\u NODE”,“3”:“TEXT\u NODE”,“4”:“CDATA\u SECTION\u NODE”,“5”:“ENTITY\u REFERENCE\u NODE”,“6”:“ENTITY\u NODE”,“7”:“PROCESSING\u INSTRUCTION\u NODE”,“8”:“注释节点”,“9”:“文档节点”,“10”:“文档类型节点”,“11”:“文档片段节点”,“12”:“注释节点”}