Python如何在使用Python写入新值后保持XML注释存在?

2024-03-01

我有一个 XML 文件,然后需要更新一些值。我的 XML 文件包含注释。我想在编写 XML 后保留注释,但它消失了。

这是我的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Data System -->
<process>
     <!-- Student Name -->
     <NAME source="hsfg" class="hshah" property="Name">
          <VALUE type="string"></VALUE>
          <VALUE type="None"></VALUE>
     </NAME>
     <!-- Exercise Number -->
     <number source="hsfg" class="hgdgf" property="gagfa">
          <VALUE type="string"></VALUE>
          <VALUE type="None"></VALUE>
     </number>
     <!-- Exam ID -->
     <id source="hsfg" class="gfdg" property="fadg">
          <VALUE type="string"></VALUE>
          <VALUE type="None"></VALUE>
     </id>
</process>

这是我需要更新的值

<!-- Student Name -->
     <NAME source="hsfg" class="hshah" property="Name">
          <VALUE type="string"></VALUE>
          <VALUE type="None"></VALUE>
     </NAME>

变成这样:

<!-- Student Name -->
     <NAME source="hsfg" class="hshah" property="Name">
          <VALUE type="string">new value</VALUE>
          <VALUE type="None"></VALUE>
     </NAME>

My code:

read = ET.parse('test.xml').getroot()
parent = read.find('.//NAME[@property="Name"]')
change = parent.find('VALUE[@type="string"]')
change.text = 'new value'
tree = ET.ElementTree(read)
tree.write("test.xml")

test.xml 文件的输出如下。评论和<?xml version="1.0" encoding="UTF-8"?>消失了。

<process>
     
     <NAME source="hsfg" class="hshah" property="Name">
          <VALUE type="string">new value</VALUE>
          <VALUE type="None" />
     </NAME>
     
     <number source="hsfg" class="hgdgf" property="gagfa">
          <VALUE type="string" />
          <VALUE type="None" />
     </number>
     
     <id source="hsfg" class="gfdg" property="fadg">
          <VALUE type="string" />
          <VALUE type="None" />
     </id>
</process>

但我的期望输出、结构和注释仍然与之前相同,更新值如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Data System -->
<process>
     <!-- Student Name -->
     <NAME source="hsfg" class="hshah" property="Name">
          <VALUE type="string">new value</VALUE>
          <VALUE type="None"></VALUE>
     </NAME>
     <!-- Exercise Number -->
     <number source="hsfg" class="hgdgf" property="gagfa">
          <VALUE type="string"></VALUE>
          <VALUE type="None"></VALUE>
     </number>
     <!-- Exam ID -->
     <id source="hsfg" class="gfdg" property="fadg">
          <VALUE type="string"></VALUE>
          <VALUE type="None"></VALUE>
     </id>
</process>

  1. Use ET.XMLParser保留评论
  2. Use encoding and xml_declaration中的论点write()编写 xml 声明的函数 尝试以下代码:
import xml.etree.ElementTree as ET
parser = ET.XMLParser(target=ET.TreeBuilder(insert_comments=True))

read = ET.parse('newXml.xml', parser=parser).getroot()
parent = read.find('.//NAME[@property="Name"]')
change = parent.find('VALUE[@type="string"]')
change.text = 'new value'
tree = ET.ElementTree(read)
tree.write("test.xml", encoding='utf-8', xml_declaration=True)

你也可以避免变量read只需使用tree:

import xml.etree.ElementTree as ET
parser = ET.XMLParser(target=ET.TreeBuilder(insert_comments=True))

tree = ET.parse('newXml.xml', parser=parser)
parent = tree.find('.//NAME[@property="Name"]')
change = parent.find('VALUE[@type="string"]')
change.text = 'new value'
tree.write("test.xml", encoding='utf-8', xml_declaration=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python如何在使用Python写入新值后保持XML注释存在? 的相关文章

随机推荐

  • Execvp 不会对未知命令返回错误

    我有以下代码 用于分叉子级并执行命令 a 这是一个未知命令 但是 execvp 不会返回错误 而是打印 成功 当文件 a 不存在时 如果我执行 mv a b 也会发生同样的事情 我应该如何捕获并处理这些错误 int main int arg
  • java.lang.ClassCastException:android.app.ContextImpl

    我正在尝试将 ScoreNinja 融入我的小游戏中 http scoreninja appspot com http scoreninja appspot com 但是 每次都会抛出运行时异常 05 24 23 22 59 888 ERR
  • Angularjs 1.X 相当于 Angular 2 HostBinding 和 HostListener

    我目前正在将一些 ng 1 X 元素指令迁移到 1 5 组件 格式 我的指令都处于 replace true 模式 其中很多指令的根元素上都有诸如 ng class 或 ng click 之类的内容 使用新的 component 格式 re
  • 如何在不依赖 JAX-RS 实现的情况下捕获 404 (NotFoundException)?

    通常一个用途ExceptionMapper捕获异常 记录它们 返回自定义的错误消息 然而 虽然 JAX RS 提供了NotFoundException在其 api 中 实现 Jeresy CXF 提供了自己的 NotFoundExcepti
  • 为开发环境分配域名localhost

    我正在构建一个网站 并且不想将网站从指向重新配置为http 127 0 0 1 to http www example com 此外 我使用的证书当然是用正确的域名制作的www example com但我的测试环境会调用127 0 0 1这
  • Apple Web Clip(Apple Touch 图标)不适用于采用 HTTPS 的网站

    当我为网站启用 HTTPS 时 我很难在 Safari 中的 添加书签 功能中显示 Apple Touch 图标 我可以使用 添加到主页 选项来使其工作 所以我不确定是否对 添加书签 进行了不同的调用 我已经按照苹果文档 https dev
  • 无法在应用程序中使用表情符号:拒绝提交到AppStore

    有谁知道是否所有表情符号都是苹果公司的财产 我试图在我的应用程序中使用其中的很多 大约 80 个 作为文本 但应用程序被拒绝 我问是否有一个我不能使用的表情符号列表 但没有得到答案 如果你已经被 AppStore 提交过程拒绝 你就会知道它
  • 如何优化画布上的动画? HTML 5

    我面临着一个问题 随着各种图片向左 向右 向上和向下移动 画布上的动画速度会减慢 我需要有关如何优化动画的建议 重要的是动画适用于所有主要浏览器 特别是 Chrome Firefox 和 Internet Explorer 动画可以优化吗
  • 如果存在依赖,编译器能否正确处理静态变量的初始化顺序?

    如果存在依赖 编译器能否正确处理静态变量的初始化顺序 例如 我有 a h struct A static double a a cpp include a h double A a 1 b h struct B static double
  • 从 DocumentDb 中删除特定文档

    以下代码检索具有特定 jobId 的所有 CrawlResult 文档 var result from c in documentDb CreateDocumentQuery
  • 特定域的 htaccess 标头?

    我有三个环境 env com env uat com env pre com 所有三个页面都运行相同的代码 我希望 env uat com 和 env pre com 都在 htaccess 中获取此内容 Header set X Robo
  • 角度隐藏忽略

    我试图在 Angular2 中使用隐藏属性 当我包含改变 DIV 显示的样式时 隐藏属性将被忽略 当运行下面的代码时 两个 div 都会显示 当我删除 displayInline 类时 第一个 DIV 被隐藏 第二个 DIV 被显示 如预期
  • TF400324:在 Visual Studio 2012 中,Team Foundation 服务无法从服务器 获得

    当我在 Visual Studio 2012 Professional 中打开现有解决方案时 出现上述错误 这曾经有效 但在重建计算机后出现了一些问题 我已经安装了 Visual Studio 2015 Community 并且可以连接到相
  • 使用反向 Y 轴计算 2 点之间的度数

    我正在使用 javascript canvas 创建一个简单的 2D 游戏 我需要计算出某个物体相对于我的位置的角度 所以 假设我在 10 10 并且物体在 10 5 这将导致 90 度 因为正 Y 向下 负 Y 向上 10 10 与 10
  • 在 PHP 中加密,在 C# (WP7 / Silverlight) 中使用 AES / Rijndael 解密

    我在我的 Android 应用程序中使用了用 PHP 编写的 REST 服务 没有遇到太多麻烦 现在我尝试在 Windows Phone 应用程序中使用它 我已经快疯了 到目前为止我所知道的 Silverlight 将仅接受 CBC 模式下
  • 用于将请求参数映射到对象的 Java 库

    我过去在一个项目中使用过 stipes 它有一个很棒的 TypeConverter 库 可以获取请求参数并将它们路由到 JavaBeans 中 它甚至可以处理映射和数组 例如 class A private int num private
  • 为什么我们应该复制块而不是保留?

    我最近在使用 Facebook 的应用程序切换块时遇到了一个问题 我需要在 Facebook 登录后调用一个块 首先 当应用程序切换回来时 我的块被破坏了 因为它在堆栈上 所以我决定保留它 但这没有用 我把这个问题搞砸了 我找到了一个解决方
  • vueJS + webpack:导入字体、CSS 和 node_modules

    我从 Vue js 和 Webpack 开始 对如何正确导入和引用我的字体 CSS 和node modules正确 我开始使用我的应用程序vue cli 这是最终的结构 build config node modules src asset
  • 使用 Geb 维护测试之间的会话

    我正在使用 Geb 测试我的应用程序 并且我想在测试之间保持会话 这样我就可以避免登录每个测试 在浏览器中观看测试时这很烦人 有没有办法保持会话 默认情况下 Geb 测试集成会在每次测试后清除所有 cookie 这意味着您会丢失 Web 会
  • Python如何在使用Python写入新值后保持XML注释存在?

    我有一个 XML 文件 然后需要更新一些值 我的 XML 文件包含注释 我想在编写 XML 后保留注释 但它消失了 这是我的 XML