首页 > 解决方案 > 如何重写 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>

标签: python

解决方案


尝试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>

推荐阅读