【问题标题】:Writing to a xml file using pythons element tree使用 pythons 元素树写入 xml 文件
【发布时间】:2015-11-17 10:49:44
【问题描述】:

我正在使用 python 的元素树库来解析/写入一个 xml 文件:

<?xml version='1.0' encoding='utf-8'?>
    <data>
      <reminder id="9">
        <enabled>true</enabled>
        <programmename>Show Me Show Me</programmename>
        <starttime>10:05</starttime>
        <sdate>Tuesday, 17 November 2015</sdate>
        <channel>NA</channel>
      </reminder>
    </data>

我正在使用以下内容将其写出来:

from xml.etree import ElementTree as ET

        data = ET.Element("data")
        reminder = ET.SubElement(data, "reminder")
        reminder.set("id", "9")
        enabled = ET.SubElement(reminder, "enabled")
        enabled.text = "true"
        programmename = ET.SubElement(reminder, "programmename")
        programmename.text = new_programmename
        starttime = ET.SubElement(reminder, "starttime")
        starttime.text = new_programmetime
        sdate = ET.SubElement(reminder, "sdate")
        sdate.text = new_programmedate
        channel = ET.SubElement(reminder, "channel")
        channel.text = "NA"
        indent(data, level=0)
        tree = ET.ElementTree(data)
        tree.write(xmlfile, xml_declaration=True, encoding='utf-8', method="xml")

虽然我很难理解如何添加额外的“记录”/元素?例如,xml 看起来像这样:

<?xml version='1.0' encoding='utf-8'?>
<data>
<reminder id="9">
    <enabled>true</enabled>
    <programmename>Show Me Show Me</programmename>
    <starttime>10:05</starttime>
    <sdate>Tuesday, 17 November 2015</sdate>
    <channel>NA</channel>
  </reminder>
<reminder id="10">
    <enabled>true</enabled>
    <programmename>foo</programmename>
    <starttime>13:05</starttime>
    <sdate>Wednesday, 18 November 2015</sdate>
    <channel>NA</channel>
  </reminder>
<data>

任何帮助将不胜感激,我找不到任何对此的参考,或者更确切地说是我能理解的参考......

【问题讨论】:

  • 这只是覆盖文件中已经存在的任何现有元素?不是吗?我想添加新元素...
  • 你找到解决方案了吗?
  • 嗨@SIslam 还没有

标签: python elementtree


【解决方案1】:

尝试如下-

from lxml import etree as et


xml="""<?xml version='1.0' encoding='utf-8'?>
    <data>
      <reminder id="9">
        <enabled>true</enabled>
        <programmename>Show Me Show Me</programmename>
        <starttime>10:05</starttime>
        <sdate>Tuesday, 17 November 2015</sdate>
        <channel>NA</channel>
      </reminder>
    </data>"""

tree = et.fromstring(xml)
element = tree.find(".//reminder[@id='9']")
element_parent  = element.getparent()
element_parent.insert(element_parent.index(element)+1,et.XML("""

<reminder id="10">
    <enabled>true</enabled>
    <programmename>foo</programmename>
    <starttime>13:05</starttime>
    <sdate>Wednesday, 18 November 2015</sdate>
    <channel>NA</channel>
</reminder>"""))

print(et.tostring(tree))

打印-

<data>
      <reminder id="9">
        <enabled>true</enabled>
        <programmename>Show Me Show Me</programmename>
        <starttime>10:05</starttime>
        <sdate>Tuesday, 17 November 2015</sdate>
        <channel>NA</channel>
      </reminder>
      <reminder id="10">
        <enabled>true</enabled>
        <programmename>foo</programmename>
        <starttime>13:05</starttime>
        <sdate>Wednesday, 18 November 2015</sdate>
        <channel>NA</channel>
      </reminder>
</data>

承认“unutbu”

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多