python - 使用 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")
解决方案
推荐阅读
- angular - 在 Visual Studio 2017 中使用 Web Deploy 发布 ASP.NET Core 2.1/Angular 应用程序不会将 ClientApp/dist 文件夹复制到主机
- c - 被覆盖的消息 - C
- azure - 在不同的 RG 中部署 Azure 容器实例
- go - 从 lib/pq 迁移到 jackc/pgx
- sharepoint - SharePoint 视图限制
- javascript - 如何将时间分量归零?
- python - pandas.to_datetime 在使用 HKMA 的开放 API 时识别正确格式的问题
- python - 无法在 Mac 上安装 mysqlclient 错误
- firebase - firebase 部署到默认域需要修改它
- apache-camel - 需要使用 Camel-Bindy 格式将字符串转换为浮点变量