python - 来自 Excel 工作表数据的 xml 文件

标签 python xml xls

您好,使用下面的代码片段,我在下面创建了一个 xml,但我注意到:我在代码中使用的参数顺序与输出中的不同,即 <node y="-3749099.0" x="-45194.0" id="11542.0"/>应该是<node id="11542.0" x="-45194.0" y="-3749099.0"/>输出也不是下面所需的输出。有人可以建议我怎么做吗:

  • 更正我的代码以获得正确的输出
  • 扩展代码,这样如果我必须使用包含许多列(超过 3 列)的 Excel 文件,我就不必硬编码 val[0], val[1], val[2]FIELD(id=str(val[0]), x=str(val[1]), y=str(val[2])),

代码片段:

import lxml.etree
import lxml.builder
import xlrd

wb = xlrd.open_workbook("emme_nodes1.xls")
sh = wb.sheet_by_index(0)
tags = [n.replace(" ", "").lower() for n in sh.row_values(0)]

for row in range(1, sh.nrows):
    val = sh.row_values(row)

    E = lxml.builder.ElementMaker()
    ROOT = E.network
    DOC = E.nodes
    FIELD = E.node
    my_doc = ROOT(
            DOC(
                FIELD(id=str(val[0]), x=str(val[1]), y=str(val[2])),
                )
            )
    print lxml.etree.tostring(my_doc, pretty_print=True)

输出:

<network>
  <nodes>
    <node y="-3748681.0" x="-45333.0" id="11543.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3747847.0" x="-44369.0" id="11540.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3748683.0" x="-45060.0" id="11541.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3750248.0" x="-45518.0" id="11546.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3750024.0" x="-45448.0" id="11547.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3749821.0" x="-44745.0" id="11544.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3750508.0" x="-45561.0" id="11545.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3750202.0" x="-45802.0" id="11548.0"/>
  </nodes>
</network>

<network>
  <nodes>
    <node y="-3749805.0" x="-45485.0" id="11549.0"/>
  </nodes>
</network>

期望的输出:

<network>
  <nodes>
    <node id="11542.0" x="-45194.0" y="-3749099.0"/>
    <node id="11543.0" x="-45333.0" y="-3748681.0"/>
    <node id="11540.0" x="-44369.0" y="-3747847.0"/>
    <node id="11541.0" x="-45060.0" y="-3748683.0"/>
    <node id="11546.0" x="-45518.0" y="-3750248.0"/>
    <node id="11547.0" x="-45448.0" y="-3750024.0"/>
    <node id="11544.0" x="-44745.0" y="-3749821.0"/>
    <node id="11545.0" x="-45561.0" y="-3750508.0"/>
    <node id="11549.0" x="-45485.0" y="-3749805.0"/>
    <node id="11548.0" x="-45802.0" y="-3750202.0"/>
    <node id="11549.0" x="-45485.0" y="-3749805.0"/>
  </nodes>
</network>

Excel 工作表 (emme_nodes1.xls):

 id         x           y
11542   -45194.0    -3749099.0
11543   -45333.0    -3748681.0
11540   -44369.0    -3747847.0
11541   -45060.0    -3748683.0
11546   -45518.0    -3750248.0
11547   -45448.0    -3750024.0
11544   -44745.0    -3749821.0
11545   -45561.0    -3750508.0
11548   -45802.0    -3750202.0
11549   -45485.0    -3749805.0

最佳答案

跟踪代码的执行。

你拥有的是这样的:

  1. 第一行:

    1. 创建新的 XML 文档生成器
    2. 创建一个新的根元素
    3. 创建新的“网络”元素
    4. 将其添加到根节点
    5. 打印整个文档
  2. 第二行:

    1. 创建新的 XML 文档生成器
    2. 创建一个新的根元素
    3. 创建新的“网络”元素
    4. 将其添加到根节点
    5. 打印整个文档
  3. 第三行: 重复


你想做的是这样的:

  1. 创建新的 XML 文档生成器
  2. 创建一个新的根元素
  3. 第一行:
    1. 创建新的“网络”元素
    2. 将其添加到根节点
  4. 第二行:
    1. 创建新的“网络”元素
    2. 将其添加到根节点
  5. ...
  6. 打印整个文档

看看您是否可以相应地更改代码并更新它。

关于python - 来自 Excel 工作表数据的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33442178/

相关文章:

java - 将单选按钮和复选框值传递给另一个 Activity

c# - OpenXml SpreadsheetDocument.Open(...) 出现异常 - 缺少主要部分

python - Qtablewidget去除黑色空间PyQt5

python - 无需额外检查即可堆叠 Numpy 数组

python - Streamlit 在使用 Docker 执行时向我显示 "Welcome to Streamlit"消息

java - csv 到 java 中超过 65536 行的 xls

c# - 如何将公式写入excel二进制文件?

python - Tkinter 单选按钮奇怪的外观

.net - XML 路径 - 不区分大小写

java - 是否有标准的 Java 实用程序可以在运行时解析 XSD 文件?