Python 从Excel创建动态嵌套xml
我正在尝试将Excel转换为嵌套XML,但未能按预期成功 这是我的密码Python 从Excel创建动态嵌套xml,python,excel,xml,Python,Excel,Xml,我正在尝试将Excel转换为嵌套XML,但未能按预期成功 这是我的密码 import openpyxl import xml.etree.ElementTree as etree # reading data from the source, xls wb1 = openpyxl.load_workbook(filename='C:\GSH\parent_child.xlsx') ws1 = wb1.get_sheet_by_name('Sheet1') row_max = ws1.max_r
import openpyxl
import xml.etree.ElementTree as etree
# reading data from the source, xls
wb1 = openpyxl.load_workbook(filename='C:\GSH\parent_child.xlsx')
ws1 = wb1.get_sheet_by_name('Sheet1')
row_max = ws1.max_row
# creating xml tree structure
root = etree.Element('Hierarchy')
# iterating through the xls and creating children based on the condition
for row_values in range(2, row_max+1):
parent = etree.SubElement(root, 'parent')
parent.text = ws1.cell(column=1, row=row_values).value
root.append(parent)
if (ws1.cell(column=1, row = row_values).value == ws1.cell(column=2, row = row_values-1).value):
print("------Inside if condition")
print(ws1.cell(column=2, row=row_values).value)
child = etree.SubElement(parent, 'child')
child.text = ws1.cell(column=2, row=row_values).value
parent.append(child)
print("-------Inside if condition")
tree = etree.ElementTree(root)
tree.write('C:\GSH\gsh.xml')
我得到的XML是这样的
但是,我的XML应该是这样的
有什么建议吗
上面是我正在处理的源XLS。您可以设置变量名,而不是父级和子级。此代码只是列表的一部分,看起来很棘手,但工作正常
d[child[i]]。text=”“
仅用于显示标签的两侧。有关使用字典在循环中生成var,请参阅
将xml.etree.ElementTree作为ET导入
印度=等元素(“印度”)#设根
父项=['India','Telangana','Telangana','Telangana','Nalgonda']#父项列表
child=['Telangana'、'Cyberabad'、'Warangal'、'Nalgonda'、'BusStation']#儿童列表
d={}#使用字典在循环中定义var
d[“印度”]=印度
对于范围内的i(len(child)):
对于d.项()中的k,v:
如果k==父[i]:
pa=v
打破
d[child[i]=ET.SubElement(pa,child[i])
d[child[i]].text=”“#获取标签的两侧
tree=ET.ElementTree(印度)
write('gsh.xml')
#
#
#
#
#
#
#
#
#
非常感谢,你救了我一天..我们能在标签外面而不是里面得到值吗?我的意思是,我仍然在努力让Nellorecittoori更新原始问题中的xls源代码。我不知道您的最终结果是什么。在我的示例代码中,varname是str(varname)。使用.text将字符串放入标记中。请尝试。我已经更新了最终结果的答案,应该是这样的。我正在尝试你的建议,并与你保持联系。我认为你的问题和预期答案都发生了很大的变化。不过,您可以通过扩展我的代码来完成。恐怕我再也不干了。
import xml.etree.ElementTree as ET
India = ET.Element('India') # set root
parent = ['India', 'Telangana', 'Telangana', 'Telangana','Nalgonda'] # parent list
child = ['Telangana', 'Cyberabad', 'Warangal','Nalgonda','BusStation'] # child list
d = {} # use dictionary to define var in loop
d['India'] = India
for i in range(len(child)):
for k, v in d.items():
if k == parent[i]:
pa = v
break
d[child[i]] = ET.SubElement(pa, child[i])
d[child[i]].text = " " # to get both side of tags
tree = ET.ElementTree(India)
tree.write('gsh.xml')
# <India>
# <Telangana>
# <Cyberabad> </Cyberabad>
# <Warangal> </Warangal>
# <Nalgonda>
# <BusStation> </BusStation>
# </Nalgonda>
# </Telangana>
# </India>