Before all things, i would like to apologize for the wall of text you're about to see.
I'm having some issues when i try to take information from two XML files and combine them in a specific way. The XML examples below are rather large, so bear with me.
The file that i use as a base is tempRSG.xml:
<root>
<Rsg>
<RsgUid mid="400000186933482">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<VorUidSta mid="4711640">
<codeId>CND</codeId>
</VorUidSta>
<DpnUidEnd mid="17826298">
<codeId>BARUK</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>15.34</valLen>
<uomDist>NM</uomDist>
</Rsg>
<Rsg>
<RsgUid mid="400000186934393">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826298">
<codeId>BARUK</codeId>
</DpnUidSta>
<DpnUidEnd mid="17826860">
<codeId>CETUL</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>9.7</valLen>
<uomDist>NM</uomDist>
</Rsg>
<Rsg>
<RsgUid mid="101002756189951">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826860">
<codeId>CETUL</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>18.33</valLen>
<uomDist>NM</uomDist>
</Rsg>
<Rsg>
<RsgUid mid="101002756189955">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002756188910">
<codeId>LOBKI</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>13.51</valLen>
<uomDist>NM</uomDist>
</Rsg>
<Rsg>
<RsgUid mid="101002756189959">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="101002756188910">
<codeId>LOBKI</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002751204897">
<codeId>BADKA</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>14.55</valLen>
<uomDist>NM</uomDist>
</Rsg>
</root>
Using the above XML document as a base, i need to copy some information from the second XML file tempRSU.xml:
<root>
<Rsu>
<RsuUid mid="101002775988912">
<RsgUid mid="101002756189951">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826860">
<codeId>CETUL</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>B</codeDir>
</RsuUid>
<Rul>
<PlcUid mid="19177244">
<PlbUid mid="19177173">
<codeId>IR</codeId>
</PlbUid>
<codeId>W</codeId>
</PlcUid>
<valDistVerLower>100</valDistVerLower>
</Rul>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="101002775988910">
<RsgUid mid="101002756189951">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826860">
<codeId>CETUL</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>F</codeDir>
</RsuUid>
<Rul>
<PlcUid mid="19177244">
<PlbUid mid="19177173">
<codeId>IR</codeId>
</PlbUid>
<codeId>W</codeId>
</PlcUid>
<valDistVerLower>100</valDistVerLower>
</Rul>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="101002775988919">
<RsgUid mid="101002756189955">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002756188910">
<codeId>LOBKI</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>F</codeDir>
</RsuUid>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="101002775988921">
<RsgUid mid="101002756189959">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="101002756188910">
<codeId>LOBKI</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002751204897">
<codeId>BADKA</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>F</codeDir>
</RsuUid>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="400000186935014">
<RsgUid mid="400000186933482">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<VorUidSta mid="4711640">
<codeId>CND</codeId>
</VorUidSta>
<DpnUidEnd mid="17826298">
<codeId>BARUK</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>F</codeDir>
</RsuUid>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="400000186935012">
<RsgUid mid="400000186933482">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<VorUidSta mid="4711640">
<codeId>CND</codeId>
</VorUidSta>
<DpnUidEnd mid="17826298">
<codeId>BARUK</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>B</codeDir>
</RsuUid>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="400000186935016">
<RsgUid mid="400000186934393">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826298">
<codeId>BARUK</codeId>
</DpnUidSta>
<DpnUidEnd mid="17826860">
<codeId>CETUL</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>B</codeDir>
</RsuUid>
<Rul>
<PlcUid mid="19177244">
<PlbUid mid="19177173">
<codeId>IR</codeId>
</PlbUid>
<codeId>W</codeId>
</PlcUid>
<valDistVerLower>85</valDistVerLower>
</Rul>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
<Rsu>
<RsuUid mid="400000186935018">
<RsgUid mid="400000186934393">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826298">
<codeId>BARUK</codeId>
</DpnUidSta>
<DpnUidEnd mid="17826860">
<codeId>CETUL</codeId>
</DpnUidEnd>
</RsgUid>
<noSeq>1</noSeq>
<codeDir>F</codeDir>
</RsuUid>
<Rul>
<PlcUid mid="19177244">
<PlbUid mid="19177173">
<codeId>IR</codeId>
</PlbUid>
<codeId>W</codeId>
</PlcUid>
<valDistVerLower>85</valDistVerLower>
</Rul>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsu>
</root>
From this second XML file, i need to copy the Rul,Rst and txtRmk elements to the first XMl file, like in the example output below.
<root>
<Rsg>
<RsgUid mid="400000186933482">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<VorUidSta mid="4711640">
<codeId>CND</codeId>
</VorUidSta>
<DpnUidEnd mid="17826298">
<codeId>BARUK</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>15.34</valLen>
<uomDist>NM</uomDist>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsg>
<Rsg>
<RsgUid mid="400000186934393">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826298">
<codeId>BARUK</codeId>
</DpnUidSta>
<DpnUidEnd mid="17826860">
<codeId>CETUL</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>9.7</valLen>
<uomDist>NM</uomDist>
<Rul>
<PlcUid mid="19177244">
<PlbUid mid="19177173">
<codeId>IR</codeId>
</PlbUid>
<codeId>W</codeId>
</PlcUid>
<valDistVerLower>85</valDistVerLower>
</Rul>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsg>
<Rsg>
<RsgUid mid="101002756189951">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="17826860">
<codeId>CETUL</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>18.33</valLen>
<uomDist>NM</uomDist>
<Rul>
<PlcUid mid="19177244">
<PlbUid mid="19177173">
<codeId>IR</codeId>
</PlbUid>
<codeId>W</codeId>
</PlcUid>
<valDistVerLower>100</valDistVerLower>
</Rul>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsg>
<Rsg>
<RsgUid mid="101002756189955">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="101002474717564">
<codeId>TIRVO</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002756188910">
<codeId>LOBKI</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>13.51</valLen>
<uomDist>NM</uomDist>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsg>
<Rsg>
<RsgUid mid="101002756189959">
<RteUid mid="85916069">
<txtDesig>L130</txtDesig>
</RteUid>
<DpnUidSta mid="101002756188910">
<codeId>LOBKI</codeId>
</DpnUidSta>
<DpnUidEnd mid="101002751204897">
<codeId>BADKA</codeId>
</DpnUidEnd>
</RsgUid>
<valLen>14.55</valLen>
<uomDist>NM</uomDist>
<Rst>
<codeWorkHr>H24</codeWorkHr>
</Rst>
<txtRmk>text</txtRmk>
</Rsg>
</root>
I wrote a small script in python that does the above operation, but with some flaws.
import xml.etree.cElementTree as ET
doc = ET.parse('tempRSG.xml')
root = doc.getroot()
rsg = root.findall('.//Rsg')
doc2 = ET.parse('tempRSU.xml')
root2 = doc2.getroot()
rsu = root2.findall('.//Rsu')
root3 = ET.Element('root')
t = 0
s = 0
for item in rsg:
text1 = item.find("./RsgUid/RteUid/txtDesig").text
codeId1 = item[0][1][0].text
codeId2 = item[0][2][0].text
#print codeId1, codeId2
#print text1
for item2 in rsu:
text2 = item2.find("./RsuUid/RsgUid/RteUid/txtDesig").text
codeId3 = item2[0][0][1][0].text
codeId4 = item2[0][0][2][0].text
#print text2
#print codeId3,codeId4
if text1 == text2:
root3.append(item)
if item2.find("./Rul") == None:
item.append(item2.find("./Rst"))
item.append(item2.find("./txtRmk"))
s += 1
else:
item.append(item2.find("./Rul"))
item.append(item2.find("./Rst"))
item.append(item2.find("./txtRmk"))
t += 1
print t
print s
tree = ET.ElementTree(root3)
tree.write('output.xml')
This might be a simple fix, or it might not. From what i can tell, there is a problem with the iteration, as the output of the above code, with the given XML file examples, returns a total of 40 elements inside output.xml, instead of the 5 elements required.
The purpose of codeId 1:4 was to make a comparison using the codes and to simply ignore the duplicates. I found that getting the .text values using the index works best, since the original XML files tags containing the said codeId are not the same, but the order is the same throughout the document.
This is where i got stuck. I can't figure out a way to sort these issues.
Some tips would be greatly appreciated.
No comments:
Post a Comment