python - XML file parsing - Get data from each parent and their own children -


i data each parent , own children fro xml file.

i'm trying parse xml file

<db>     <entry>         <name>assembly.iam</name>         <displayname>assembly.iam</displayname>         <scalar>             <name>d0</name>             <displayname>d0 (value = 0 mm)</displayname>             <value>0</value>         </scalar>         <scalar>              <name>d1</name>              <displayname>d1 (value = 0 mm)</displayname>         <value>0</value>         </scalar>     </entry>     <entry>         <name>ground.ipt</name>         <displayname>ground.ipt</displayname>         <scalar>             <name>ground_length</name>             <displayname>ground_length (value = 160 mm)</displayname>             <value>160</value>         </scalar>         <scalar>             <name>d2</name>             <displayname>d2 (value = 80 mm)</displayname>             <value>80</value>         </scalar>     </entry> </db> 

in fact, data <displayname></displayname>. then, put data array of tuples this

[(assembly.iam,[d0 (value = 0 mm), d1 (value = 0 mm)]), (ground.ipt,[ground_length (value = 160 mm), d2 (value = 80 mm)]) 

i have tried use xml.etree.celementtree library code

from xml.etree import celementtree import numpy np  workingdir = "c:/users/vince/test" newstrworkingdir = str.replace(workingdir, '/', '\\') tree = celementtree.parse(newstrworkingdir + "\\test.xml") root = tree.getroot() tab = np.empty(shape=(0, 0)) tabentry = np.empty(shape=(0, 0)) tabscalar = np.empty(shape=(0, 0))  entry in root.findall('entry'):     entrynames = entry.findall("./displayname")     entrynamestext = entry.find("./displayname").text     tabentry = np.append(tabentry,entrynamestext)     scalar in entry.findall('scalar'):         scalarnames = scalar.findall("./displayname")         scalarnamestext = scalar.find("./displayname").text         tabscalar = np.append(tabscalar,scalarnamestext)         tab = np.append(tab,(entrynamestext,scalarnamestext))  print(tab) 

but outputs me this

['assembly.iam' 'd0 (value = 0 mm)' 'assembly.iam' 'd1 (value = 0 mm)' 'ground.ipt' 'ground_length (value = 160 mm)'  'ground.ipt' 'd2 (value = 80 mm)'] 

to wanted structure, have build lists of lists:

import os xml.etree import celementtree  workingdir = "c:\\users\\vince\\test" tree = celementtree.parse(os.path.join(newstrworkingdir, "test.xml")) root = tree.getroot() tab = []  entry in root.findall('entry'):     entry_name = entry.findtext("./displayname")     scalar_names = [e.text e in entry.findall('scalar/displayname')]     tab.append((entry_name, scalar_names)) print(tab) 

Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -