Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Excel创建动态嵌套xml_Python_Excel_Xml - Fatal编程技术网

Python 从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

我正在尝试将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_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>