Python XML解析-多节
我有一个如下所示的XML文件:Python XML解析-多节,python,xml,parsing,Python,Xml,Parsing,我有一个如下所示的XML文件: <item> <global> <option id="123b25-1323-2f"> <name>Bla</name> <number>0123987</number> </option> <option id="aeb12f-91b3-57"> <name>Foo</n
<item>
<global>
<option id="123b25-1323-2f">
<name>Bla</name>
<number>0123987</number>
</option>
<option id="aeb12f-91b3-57">
<name>Foo</name>
<number>92309</number>
</option>
<section id="aeee72-0965-66">
<name>alb</name>
<number>0123987</number>
</section>
<section id="928374-11b3-51">
<name>oof</name>
<number>92309</number>
</section>
</global>
</item>
我希望输出如下:
=> {'id-123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}, 'id-aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}}
我遇到过这个模块,它非常有用。
我遇到了这个模块,它非常有用。
您可以使用xml.dom.minidom解析xml字符串并提取元素以创建字典。下面是一个minidom示例
from xml.dom.minidom import parseString
dom = parseString(data) #xml dom object from xml
def getItems(node):
"""dom parser and xml generator"""
return {node.getAttribute('id'):
dict((e.nodeName, e.firstChild.data)
for e in node.childNodes if e.nodeType == dom.ELEMENT_NODE)
for node in node }
options = dom.getElementsByTagName('option')
sections = dom.getElementsByTagName('section')
getItems(options)
{u'aeb12f-91b3-57': {u'name': u'Foo', u'number': u'92309'}, u'123b25-1323-2f': {u'name': u'Bla', u'number': u'0123987'}}
getItems(sections)
{u'928374-11b3-51': {u'name': u'oof', u'number': u'92309'}, u'aeee72-0965-66': {u'name': u'alb', u'number': u'0123987'}}
可以使用xml.dom.minidom解析xml字符串并提取元素以创建字典。下面是一个minidom示例
from xml.dom.minidom import parseString
dom = parseString(data) #xml dom object from xml
def getItems(node):
"""dom parser and xml generator"""
return {node.getAttribute('id'):
dict((e.nodeName, e.firstChild.data)
for e in node.childNodes if e.nodeType == dom.ELEMENT_NODE)
for node in node }
options = dom.getElementsByTagName('option')
sections = dom.getElementsByTagName('section')
getItems(options)
{u'aeb12f-91b3-57': {u'name': u'Foo', u'number': u'92309'}, u'123b25-1323-2f': {u'name': u'Bla', u'number': u'0123987'}}
getItems(sections)
{u'928374-11b3-51': {u'name': u'oof', u'number': u'92309'}, u'aeee72-0965-66': {u'name': u'alb', u'number': u'0123987'}}
输出:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
options:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
sections:
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
输出:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
options:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
sections:
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
是一个非常合适的标准库模块。下面是一个建议(Python 2.7):
从xml.etree导入ElementTree作为ET
def get_项目(元素):
D={elem.get(“id”):dict((child.tag,child.text)表示元素中的子元素)
对于元素中的元素}
返回D
tree=ET.parse(“item.xml”)
options=tree.findall(“.//选项”)
sections=tree.findall(“.//section”)
打印“选项:”
打印获取项目(选项)
打印“部分:”
打印获取项目(部分)
输出:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
options:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
sections:
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
是一个非常合适的标准库模块。下面是一个建议(Python 2.7):
从xml.etree导入ElementTree作为ET
def get_项目(元素):
D={elem.get(“id”):dict((child.tag,child.text)表示元素中的子元素)
对于元素中的元素}
返回D
tree=ET.parse(“item.xml”)
options=tree.findall(“.//选项”)
sections=tree.findall(“.//section”)
打印“选项:”
打印获取项目(选项)
打印“部分:”
打印获取项目(部分)
输出:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
options:
{'aeb12f-91b3-57': {'name': 'Foo', 'number': '92309'}, '123b25-1323-2f': {'name': 'Bla', 'number': '0123987'}}
sections:
{'928374-11b3-51': {'name': 'oof', 'number': '92309'}, 'aeee72-0965-66': {'name': 'alb', 'number': '0123987'}}
那和我要找的一模一样。我现在不能试一下,但先谢谢你,这和我要找的一模一样。我现在不能试一下,但先谢谢你