Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XML解析-多节_Python_Xml_Parsing - Fatal编程技术网

Python 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

我有一个如下所示的XML文件:

<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'}}

那和我要找的一模一样。我现在不能试一下,但先谢谢你,这和我要找的一模一样。我现在不能试一下,但先谢谢你