У меня есть образец входного файла
<metadata-records>
<metadata-record class='column'>
<remote-name>Category</remote-name>
<remote-type>130</remote-type>
<local-name>[Category]</local-name>
<parent-name>[Custom SQL Query]</parent-name>
<remote-alias>Category</remote-alias>
<ordinal>1</ordinal>
<local-type>string</local-type>
<aggregation>Count</aggregation>
<contains-null>true</contains-null>
<collation>LEN_RUS_S2_WO</collation>
<attributes>
<attribute datatype='string' name='DebugRemoteType'>"WSTR"</attribute>
</attributes>
</metadata-record>
<metadata-record class='column'>
<remote-name>Quantity</remote-name>
<remote-type>5</remote-type>
<local-name>[Quantity]</local-name>
<parent-name>[Custom SQL Query]</parent-name>
<remote-alias>Quantity</remote-alias>
<ordinal>8</ordinal>
<local-type>real</local-type>
<aggregation>Sum</aggregation>
<precision>15</precision>
<contains-null>true</contains-null>
<attributes>
<attribute datatype='string' name='DebugRemoteType'>"R8"</attribute>
</attributes>
</metadata-record>
</metadata-records>
Мой код ниже
import xml.etree.cElementTree as et
import shutil, os
colName = []
colType = []
colLname = []
colPname = []
colAlias = []
colOrd = []
colLtype = []
colagg = []
colcolla = []
colprec = []
colcnull = []
for x in xmlRoot.findall('./connection/metadata-records/metadata-record'):
colName.append(x.find('remote-name').text)
colType.append(x.find('remote-type').text)
colLname.append(x.find('local-name').text)
colPname.append(x.find('parent-name').text)
colAlias.append(x.find('remote-alias').text)
colOrd.append(x.find('ordinal').text)
colLtype.append(x.find('local-type').text)
colagg.append(x.find('aggregation').text)
colcnull.append(x.find('contains-null').text)
if x.find('precision') is not None:
colprec.append(x.find('precision').text)
print("1")
else:
colcolla.append(x.find('collation').text)
print("2")
output = et.Element("output")
sql = et.SubElement(output, "sql")
sql.text = sqlString
metadatarecords = et.SubElement(output, "metadata-records")
for i in range(colNumber):
column = et.SubElement(metadatarecords, "metadata-record")
colname = et.SubElement(column, "remote-name")
colname.text = colName[i]
datatype = et.SubElement(column, "remote-type")
datatype.text = colType[i]
Localname = et.SubElement(column, "local-name")
Localname.text = colLname[i]
Parentname = et.SubElement(column, "parent-name")
Parentname.text = colPname[i]
alias = et.SubElement(column, "remote-alias")
alias.text = colAlias[i]
Ord = et.SubElement(column, "ordinal")
Ord.text = colOrd[i]
ltype = et.SubElement(column, "local-type")
ltype.text = colLtype[i]
aggre = et.SubElement(column, "aggregation")
aggre.text = colagg[i]
**if colcolla is not None :
coll = et.SubElement(column, "collation")
coll.text = colcolla[i]
else:
cpr = et.SubElement(column, "precision")
cpr.text = colprec[i]**
cnull = et.SubElement(column, "contains-null")
cnull.text = colcnull[i]
Когда я пытаюсь записать массив, я выхожу из индекса, потому что когда colcolla [i] там colprec [i] не будет, аналогично наоборот. так что мой вывод такой же, как и ввод для проверки. если я запустил приведенный выше код, я выхожу из ошибки индексного массива. Может кто-нибудь помочь, я не смог найти, в чем проблема .. Спасибо, Аару sh