如何使用xmltodict从xml fi中获取项

2024-09-29 21:55:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图轻松地从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

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

import xmltodict

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

Tags: 文件doccodexmlhighlightfdabc123xmltodict
3条回答

这是在使用xml.etree 你可以试试这个:

for artikelobj in root.findall('artikel'):
    print artikelobj.find('code')

如果要基于artikel的“nummer”属性提取特定代码,则可以尝试以下操作:

for artikelobj in root.findall('artikel'):
    if artikel.get('nummer') == 121:
        print artikelobj.find('code')

这将只打印您想要的代码。

要读取.xml文件:

import lxml.etree as ET
root = ET.parse(filename).getroot()
value = root.node1.node2.variable_name.text

用你的例子:

import xmltodict

with open('artikelen.xml') as fd:
    doc = xmltodict.parse(fd.read())

如果您检查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')])])]))])

根节点被称为artikelen,并且有一个子节点artikel,它是OrderedDict对象的列表,因此如果您希望为每一篇文章都使用code,您可以:

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

# >>> codes
# ['ABC123', 'PQR678']

如果您特别希望仅当nummer121时才使用code,则可以执行以下操作:

code = None
for artikel in doc['artikelen']['artikel']:
    if artikel['@nummer'] == '121':
        code = artikel['code']
        break

也就是说,如果您正在解析XML文档并希望搜索这样的特定值,我将考虑使用XPath expressions,这是由ElementTree支持的。

相关问题 更多 >

    热门问题