2016-08-17 6 views
1

У меня есть массив под названием projectDet []. Он содержит около 350 наименований.python: обработка массива элементов XML с деревом элементов предпочтительно «merge»

EACH Элемент в массиве - информация xml (отдельный элемент ниже). Xml для каждого элемента - это тот же формат, но разные идентификаторы и значения. Я бы предпочел, чтобы все они были в одной большой переменной XML, из которой я могу извлечь Элементы из дерева элементов. Сейчас я не знаю, как использовать Element tree, чтобы пройти через 300 элементов в массиве.

У меня есть код, который проверяет другой набор XML для идентификатора, а затем, если идентификатор в XML-данных A соответствует ID в xml-данных B, я беру «оплачиваемые часы» и добавляю его в окончательную строку CSV, которая соответствует id. Это работает с другим XML, который НЕ находится в массиве. Поэтому мне кажется, что самый простой способ - использовать код, который у меня есть, но мне нужно как-то «объединить» все эти записи в одну переменную, которую я могу подключить к моим существующим функциям.

Итак, есть способ перебрать этот массив и объединить каждый элемент в один xml. Все они имеют одну и ту же структуру дерева. I.e root/team_member/item и root/tasks/item

Спасибо за любой совет.

<root> 
<team_members type="list"> 
    <item type="dict"> 
     <id>1137</id> 
     <cost_rate type="float">76.0</cost_rate> 
     <budget_spent_percentage type="null" /> 
     <projected_hours type="float">0.0</projected_hours> 
     <user_id type="int">1351480</user_id> 
     <total_hours type="float">0.0</total_hours> 
     <name>Bob R</name> 
     <budget_left type="null" /> 
    </item> 
    <item type="dict"> 
     <id>1137</id> 
     <cost_rate type="null" /> 
     <budget_spent_percentage type="null" /> 
     <projected_hours type="float">2072.0</projected_hours> 
     <user_id type="null" /> 
     <total_hours type="float">0.0</total_hours> 
     <name>Samm</name> 
     <budget_left type="null" /> 
    </item> 
</team_members> 
<nonbillable_detailed_report_url type="str">/reports/detailed/any</nonbillable_detailed_report_url> 
<detailed_report_url type="str">/reports/any</detailed_report_url> 
<billable_detailed_report_url type="str">/reports/any</billable_detailed_report_url> 
<tasks type="list"> 
    <item type="dict"> 
     <id>1137</id> 
     <budget_left type="null" /> 
     <budget_spent_percentage type="null" /> 
     <billed_rate type="float">0.0</billed_rate> 
     <over_budget type="null" /> 
    </item> 
    <item type="dict"> 
     <id>1137</id> 
     <budget_left type="null" /> 
     <budget_spent_percentage type="null" /> 
     <billed_rate type="float">0.0</billed_rate> 
     <over_budget type="null" /> 
    </item> 
    <item type="dict"> 
     <id>1137</id> 
     <budget_left type="null" /> 
     <budget_spent_percentage type="null" /> 
     <billed_rate type="float">0.0</billed_rate> 
     <over_budget type="null" /> 
     <total_hours type="float">0.0</total_hours> 
     <budget type="null" /> 
    </item> 
    <item type="dict"> 
     <id>1137</id> 
     <budget_left type="null" /> 
     <budget_spent_percentage type="null" /> 
     <billed_rate type="float">0.0</billed_rate> 
     <over_budget type="null" /> 
     <total_hours type="float">0.0</total_hours> 
     <budget type="null" /> 
    </item> 
    <item type="dict"> 
     <id>1137</id> 
     <budget_left type="null" /> 
     <budget_spent_percentage type="null" /> 
     <billed_rate type="float">0.0</billed_rate> 
     <over_budget type="null" /> 
     <total_hours type="float">0.0</total_hours> 
     <budget type="null" /> 
    </item> 
    <item type="dict"> 
     <id>1137</id> 
     <budget_left type="null" /> 
     <budget_spent_percentage type="null" /> 
     <billed_rate type="float">0.0</billed_rate> 
     <over_budget type="null" /> 
     <total_hours type="float">0.0</total_hours> 
     <budget type="null" /> 
    </item> 
</tasks> 
</root> 
+0

ли это NumPy массив или список '[]'? – Parfait

+0

@ Parfait привет снова! Я создал его, выполнив projectDet = [], поэтому я предполагаю, что это список? –

ответ

2

Рассмотрите возможность использования append() для добавления всех детей в <root> итеративно по списку. Но сначала захватить первый полный элемент <root>, а затем добавить после этого:

import xml.etree.ElementTree as ET 

cnt = 1 
for i in projectDet: 
    if cnt == 1: 
     main = ET.fromstring(i) 

    else: 
     team = ET.fromstring(i).findall('.//team_members') 
     main.append(team[0])   
     nonbill = ET.fromstring(i).findall('.//nonbillable_detailed_report_url') 
     main.append(nonbill[0]) 
     detrpt = ET.fromstring(i).findall('.//detailed_report_url') 
     main.append(detrpt[0])           
     bill = ET.fromstring(i).findall('.//billable_detailed_report_url') 
     main.append(bill[0]) 
     task = ET.fromstring(i).findall('.//tasks') 
     main.append(task[0]) 

    cnt+=1 

# OUTPUT LARGE XML (main OBJ) 
print(ET.tostring(main).decode("UTF-8")) 

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

  • Нет связанных вопросов^_^