2016-03-27 2 views
0

У меня есть XML-файл, который выглядит следующим образом:Python: Получить значение с xmltodict

<?xml version="1.0" encoding="utf-8"?> 
<session id="2934" name="Valves" docVersion="5.0.1"> 
    <docInfo> 
     <field name="Employee" isMandotory="True">Jake Roberts</field> 
     <field name="Section" isOpen="True" isMandotory="False">5</field> 
     <field name="Location" isOpen="True" isMandotory="False">Munchen</field> 
    </docInfo> 
</session> 

Использование xmltodict Я хочу, чтобы получить Работник в строке. Вероятно, это довольно просто, но я не могу понять это.

Вот мой код:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 


import sys 
import xmltodict 


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


print "ID   : %s" % doc['session']['@id'] 
print "Name  : %s" % doc['session']['@name'] 
print "Doc Version : %s" % doc['session']['@docVersion'] 


print "Employee : %s" % doc['session']['docInfo']['field'] 


sys.exit(0) 

С этим, я получаю все поля в списке, но, вероятно, с xmltodict каждый отдельный атрибут поле или элемент доступен в качестве ключевого значения. Как получить доступ к значению «Jake Roberts», например, я обращаюсь к значению docVersion?

ответ

0

Что вы получаете, это список полей, где каждое поле представлено dict(). Исследуйте этот dict (например, в интерактивной оболочке Python), чтобы сузить, как добраться до нужного значения.

>>> doc["session"]["docInfo"]["field"][0] 
OrderedDict([(u'@name', u'Employee'), (u'@isMandotory', u'True'), ('#text', u'Jake Roberts')]) 

Для того, чтобы добраться до значения элемента добавить ["#text"] к концу линии в приведенном выше фрагменте.

+0

Спасибо. Вот и все! Проблема решена. – JakeRoberts

+0

@JakeRoberts Добро пожаловать! - если ответ StackOverflow решает проблему/отвечает на вопрос, у вас есть возможность [принять его] (http://meta.stackexchange.com/q/5234/179419), нажав галочку (рядом с ответом). Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Примечание: для этого нет никаких обязательств. – CaptSolo

Смежные вопросы