python - 如何重写 XML
问题描述
我有 XML 文件。我需要在这个文件字符串中搜索并在同一个地方重写新字符串。例如:
搜索:<Node name="hMKD11CY022_HW" type="T_REAL" access="ReadWrite" />\n
改写:<Node name="hMKD11CY022_HW" type="T_BYTE" access="ReadWrite" />\n
from __future__ import print_function
import fileinput
import os
# -*- coding: utf-8 -*-
print("SCRIPT")
f = open('example.xml','r+')
line = f.readline()
while line:
line = f.readline()
if line.find('hMKD11CY022_HW') != -1 :
print(line)
f.write('<Node name="hMKD11CY022_HW" type="T_BYTE" access="ReadWrite" />\n');
print("SPAMER")
f.close()
print()
我的 XML:
<Comment>XXXXXXXX</Comment>
</Node>
<Node name="hMKD11CY022_HW" type="T_REAL" access="ReadWrite" />
<Node name="hMKD11CY022_QHW" type="T_BYTE" access="ReadWrite" />
<Node name="hMKD12CY021_HW" type="T_REAL" access="ReadWrite" />
<Node name="hMKD12CY021_QHW" type="T_BYTE" access="ReadWrite" />
<Node name="hMKD12CY022_HW" type="T_REAL" access="ReadWrite" />
<Node name="hMKD12CY022_QHW" type="T_BYTE" access="ReadWrite" />
<Node name="hMKY01DE010A_QHW" type="T_BYTE" access="ReadWrite" />
<Node name="hMKY01DE010D_QHW" type="T_BYTE" access="ReadWrite" />
<Node name="hMYB01GS001_QHW" type="T_BYTE" access="ReadWrite" />
<Node name="vMBP13AA051_XC02" type="T_BOOL" access="ReadWrite" />
<Node name="vMBP13AA151_XC02" type="T_BOOL" access="ReadWrite" />
<Node name="vMBP15AA151_XC02" type="T_BOOL" access="ReadWrite" />
<Node name="vvMBA10CS101_XM26" type="T_BYTE" access="ReadWrite" />
<Node name="vvMBA10CS101_XQ01" type="T_REAL" access="ReadWrite" />
<Node name="vvMBA10CS102_XM26" type="T_BYTE" access="ReadWrite" />
<Node name="vvMBA10CS102_XQ01" type="T_REAL" access="ReadWrite" />
<Node name="vvMBA10CS103_XM26" type="T_BYTE" access="ReadWrite" />
<Node name="vvMBA10CS103_XQ01" type="T_REAL" access="ReadWrite" />
<Node name="vvMBA10CS902_XM26" type="T_BYTE" access="ReadWrite" />
<Node name="vvMBA10CS902_XQ01" type="T_REAL" access="ReadWrite" />
</Node>
解决方案
尝试lxml
:
from lxml import etree
with open("so.xml") as f:
# Parse the input.
tree = etree.parse(f)
# Find the node we are interested in.
node = tree.xpath("/root/Node[@name=\"hMKD11CY022_HW\"]")[0]
# Set the "type" attribute value.
node.set("type", "T_BYTE")
# Save the tree to a new file.
with open("so.out.xml", "wb") as g:
tree.write(g)
对于输入文件so.xml
<root>
<Node name="hMKD11CY022_HW" type="T_REAL" access="ReadWrite" />
</root>
这将写入输出文件so.out.xml
:
<root>
<Node name="hMKD11CY022_HW" type="T_BYTE" access="ReadWrite"/>
</root>
推荐阅读
- java - Spring Elasticsearch JSON to Object for Thymeleaf?
- php - 获取不是特殊字符的字符串的第一个字母/数字
- azure-devops - Azure CLI 任务中的文件路径
- node.js - 如果我保留 package-lock.json 文件,则无法安装 npm 包,npm ERR!输入 npm install 后出现 errno -4048
- groovy - Groovy 脚本在 ',' 处拆分文件行并创建一个新的 XML 文件
- android - 如何从 android app bundle 分发支持版本?
- .net - 在 Visual Studio 2019 中引用共享发布配置文件
- javascript - 在 Google Cloud Firestore 中获取 promise 中递增的计数器值
- flutter - 如何将 Future Dynamic 更改为字符串?
- winforms - 是否有可能有一个始终保持在顶部并通过它传递点击的表单?