首页 > 解决方案 > 使用 Python 从 excel 数据构建 XML

问题描述

我正在尝试使用 python 从 excel 电子表格构建一个 xml 文件,但在构建结构时遇到了麻烦。xml 模式对于软件来说是唯一的,因此开头的几个标签和结尾的几个标签将更容易像变量一样写入 xml 文件,如下所示。它们是恒定的,因此从“

我相信脚本需要遍历另一个工作表,即“.XML 框架”工作表来构建 .xml 结构,因为这些值最终会发生变化。该表的结构如下所示。

这是 .xml 结构,python 从中可以很好地输出唯一值,并且变化的值以粗体显示。这仅显示工作簿中的一行数据。当工作簿有第二行时,.xml 结构会在以 . 开头的位置再次重复。

excel工作表“.XML Framework”中的数据结构为:

col 1 = **equals**
col 2 = **74**
col 3 = **Data**"
col 4 = col 3
col 5 = **Name 07**
col 6 = col 5
col 7 = **wstring**
col 8 = /**SM15-HVAC-SUPP-TM-37250-ST**

这是所需的 XML 结构

<?xml version="1.0" encoding="UTF-8" ?>
<exchange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://download.autodesk.com/us/navisworks/schemas/nw-exchange-12.0.xsd" units="m" filename="" filepath="">
  <selectionsets>
    <selectionset name="Dev_1">
      <findspec mode="all" disjoint="0">
        <conditions>
            <condition test="**equals**" flags="**74**">
              <category>
                <name internal="**Data**">**Data**</name>
              </category>
              <property>
                <name internal="**Name 07**">**Name 07**</name>
              </property>
              <value>
                <data type="**wstring**">/**SM15-HVAC-SUPP-TM-37250-ST**</data>
              </value>
            </condition>
          </conditions>
    <locator>/</locator>
  </findspec>
</exchange>

这是我从 python 的尝试:

path = (r"C:\\Users\\ciara\\desktop\\")
book = os.path.join(path + "Search_Set.xlsm")
wb = openpyxl.load_workbook(book)
sh = wb.get_sheet_by_name('.XML Framework')
df1 = pd.read_excel(book, "<CLEAN>", header=None)

#opening 5 lines of .xml search
print(df1)
cV1 = df1.iloc[0,0] #xml header
print (cV1)
cV2 = df1.iloc[1,0] #<exchange>
print (cV2)
cV3 = df1.iloc[2,0] #<selectionsets>
print (cV3)
cV4 = df1.iloc[3,0] #<selection set name>
print (cV4)
cV5 = df1.iloc[4,0] #<findspec mode>
print (cV5)
cV6 = df1.iloc[5,0] #<findspec mode>
print (cV6)

E = lxml.builder.ElementMaker() 
root = ET.Element(cV1)
doc0 = ET.SubElement(root, cV2)
doc1 = ET.SubElement(doc0, cV3)
doc2 = ET.SubElement(doc1, cV4)
doc3 = ET.SubElement(doc2, cV5)
doc4 = ET.SubElement(doc3, cV6)


the_doc = root(
        doc0(
                doc1(
                        doc2(
                                doc3(
                                    FIELD1('condition test=', name='blah'),
                                    FIELD2('some value2', name='asdfasd'),
                                    )
                                )
                            )
                        )   
                    )   

print (lxml.etree.tostring(the_doc, pretty_print=True))

tree = ET.ElementTree(root)
tree.write("filename.xml")

标签: pythonexcel

解决方案


推荐阅读