我可能在文档中遗漏了一些非常明显的东西,我正在尝试创建一个更通用的解析例程,它不需要知道xml标记名和属性名,只需要知道有一定数量的级别和一定数量的属性。 我试图解析与下面示例类似的xml,以将这些属性的值转换为变量,而不使用这些名称:
<xtest>
<ytest>
<ztest idx="1" a="1" b="2" c="3" />
<ztest idx="2" a="4" b="5" c="6" />
</ytest>
</xtest>
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from xml.dom import minidom
TAGLVLZERO = 0
TAGLVLONE = 1
def parsemyxmlwithtxttags (xmlfile):
#load entire xml into memory
xmldoc = minidom.parse(xmlfile)
#set first level tag
xtestnode = xmldoc.getElementsByTagName("xtest")[0]
#set second level tag
ytestnode = xtestnode.getElementsByTagName("ytest")[0]
#set third level tag
ztestnode = ytestnode.getElementsByTagName("ztest")
Parms = {}
for l in ztestnode:
mylist = [l.getAttribute("a") , l.getAttribute("b") , l.getAttribute("c")]
Parms [l.getAttribute("idx")] = mylist
print Parms
def parsemyxml (xmlfile):
#load entire xml into memory
xmldoc = minidom.parse(xmlfile)
xNode = xmldoc.childNodes[TAGLVLZERO]
print xNode.toxml()
yNode = xNode.childNodes[TAGLVLONE]
print yNode.toxml()
zNode = yNode.childNodes[TAGLVLONE]
print zNode.toxml()
#At this point how do I get the attributes out of the znode
def main():
parsemyxml("tester.xml")
parsemyxmlwithtxttags("tester.xml")
if __name__ == '__main__':
main()
parsexml的输出
^{pr2}$parsxmlwithtags的输出
{u'1': [u'1', u'2', u'3'], u'2': [u'4', u'5', u'6']}
在
xml.dom.minidom
中,element.childNodes
表示元素的子节点,它是元素的列表。当你这样做的时候-你实际上是在直接索引这个列表。在
xml.dom.minidom
中,childNodes
可以包含除ELEMENT_NODES
之外的其他类型的节点,如TEXT_NODE
、COMMENT_NODE
等。在对于当前的精确xml,索引是有效的,但是如果稍微改变一下,程序就会崩溃。在
您可以使用} ,它有一个}属性,您可以使用
Node.attributes
来获取元素的属性,这会给您一个^{length
属性和{item
来使用索引来获取属性。在如果您的目标是深入到xml的两个层次并得到
^{pr2}$dict/list
,就像在第一个例子中那样。您可以使用以下迭代代替-在函数中使用上述代码。在
示例/演示-
相关问题 更多 >
编程相关推荐