2016-10-06 8 views
0

люди! Я пытаюсь разобрать некоторые странный Сформированный XML:Анализ XML-атрибутов с помощью python и ElementTree

<?xml version="1.0" encoding="UTF-8"?> 
<analytics> 
    <standard1> 
    ... 
    <attributes> 
     <attribute name="agentname" value="userx userx" /> 
     <attribute name="agentpk" value="5" /> 
     <attribute name="analytics:callid" value="757004000003597" /> 
     ... 
     <attribute name="wrapuptime" value="0" /> 
    </attributes> 
    </standard1> 
    <standard2> 
    ... 
    <attributes> 
     <attribute name="agentname" value="userx userx" /> 
     <attribute name="agentpk" value="5" /> 
     <attribute name="analytics:callid" value="757004000003597" /> 
     ... 
     <attribute name="wrapuptime" value="0" /> 
    </attributes> 
    </standard2> 
    <engines> 
    ... 
    </engines> 
</analytics> 

Так как имени и значения являются атрибутами, я понятия не имею, как получить доступ к значения по имени без зацикливания через все подразделы атрибутов с циклом foreach.

Любые идеи о том, как получить прямой доступ с помощью ElementTree?

ответ

1

Вы можете использовать простое выражение XPath для фильтрации элемента attribute на значение атрибута name. Образец рабочий код:

import xml.etree.ElementTree as ET 

data = """<?xml version="1.0" encoding="UTF-8"?> 
<analytics> 
    <standard> 
     <attributes> 
     <attribute name="agentname" value="userx userx" /> 
     <attribute name="agentpk" value="5" /> 
     <attribute name="analytics:callid" value="757004000003597" /> 
     <attribute name="wrapuptime" value="0" /> 
     </attributes> 
    </standard> 
</analytics> 
""" 

root = ET.fromstring(data) 
print(root.find(".//attribute[@name='agentname']").attrib["value"]) 

Печать:

userx userx 

берегись, xml.etree.ElementTree имеет limited XPath support.

+0

@ e-pirate хорошо, я все еще не уверен, что именно вы делаете, но вы можете настроить выражение (выражения), например. './/standard2//attributes/attribute[@name='agentname']'..hope, который помогает. – alecxe

+0

@ e-pirate Пожалуйста, просмотрите обновленный XML. Мне нужно выбрать, какие атрибуты подразделяют на какой именно стандартX на поиск. –

+0

@ e-pirate хорошо, давайте подходим к нему по-другому. Не могли бы вы разместить то, что вам нужно, для представленного в вопросе XML? Благодарю. – alecxe