如何使用xmltodict从xml文件中获取项目

Sam*_*ink 9 python xml xmltodict

我试图轻松访问xml文件中的值.

<artikelen>
    <artikel nummer="121">
        <code>ABC123</code>
        <naam>Highlight pen</naam>
        <voorraad>231</voorraad>
        <prijs>0.56</prijs>
    </artikel>
    <artikel nummer="123">
        <code>PQR678</code>
        <naam>Nietmachine</naam>
        <voorraad>587</voorraad>
        <prijs>9.99</prijs>
    </artikel>
..... etc
Run Code Online (Sandbox Code Playgroud)

如果我想访问值ABC123,我该如何获取它?

import xmltodict

with open('8_1.html') as fd:
    doc = xmltodict.parse(fd.read())
    print(doc[fd]['code'])
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 16

使用你的例子:

import xmltodict

with open('artikelen.xml') as fd:
    doc = xmltodict.parse(fd.read())
Run Code Online (Sandbox Code Playgroud)

如果你检查一下doc,你会看到它是一个OrderedDict按标签排序的:

>>> doc
OrderedDict([('artikelen',
              OrderedDict([('artikel',
                            [OrderedDict([('@nummer', '121'),
                                          ('code', 'ABC123'),
                                          ('naam', 'Highlight pen'),
                                          ('voorraad', '231'),
                                          ('prijs', '0.56')]),
                             OrderedDict([('@nummer', '123'),
                                          ('code', 'PQR678'),
                                          ('naam', 'Nietmachine'),
                                          ('voorraad', '587'),
                                          ('prijs', '9.99')])])]))])
Run Code Online (Sandbox Code Playgroud)

调用根节点artikelen,并且有一个子节点,artikel它是一个OrderedDict对象列表,所以如果你想要code每篇文章,你会这样做:

codes = []
for artikel in doc['artikelen']['artikel']:
    codes.append(artikel['code'])

# >>> codes
# ['ABC123', 'PQR678']
Run Code Online (Sandbox Code Playgroud)

如果你特别想要的code,只有当nummer121,你可以这样做:

code = None
for artikel in doc['artikelen']['artikel']:
    if artikel['@nummer'] == '121':
        code = artikel['code']
        break
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你正在解析XML文档并想要搜索这样的特定值,我会考虑使用支持的XPath表达式ElementTree.


Chr*_*Chr -3

要读取 .xml 文件:

import lxml.etree as ET
root = ET.parse(filename).getroot()
value = root.node1.node2.variable_name.text
Run Code Online (Sandbox Code Playgroud)