首页 > 解决方案 > XML文件中的Python替换()

问题描述

我面临另一个问题。

我有一种带有示例代码的 XML 文件:

<case classname="perf" name="device">
    <Type>GET</Type>
    <Name>xxx</Name>
    <Request>Something</Request>
</case>

<case2 name="device_n>
    <Type>GET</Type>
    <Name>yyy</Name>
    <Request>Something</Request>
</case2>

<case...n>
...
</case...n>

如何将 xxx 替换为 'device' 和 yyy 以将 case2 替换为 device_n?

我认为这样的事情可以,但不知道如何写:

with open('some_xml.xml') as parsed:
    if line in parsed.readlines.startswith("name="):
        line.replace('', "name=... #what's now?

这应该是某种迭代器,因为我有很多案例。

标签: pythonxmlreplace

解决方案


使用正则表达式可能有更聪明的方法,但基本的字符串搜索似乎有效:

import io

data = '''
<case classname="perf" name="device">
    <Type>GET</Type>
    <Name>xxx</Name>
    <Request>Something</Request>
</case>

<case2 name="device_n">
    <Type>GET</Type>
    <Name>yyy</Name>
    <Request>Something</Request>
</case2>'''

strOut="" # new string
f = io.StringIO(data)  # load string data as file text
for rowx in f:  # each line in data
    row = rowx.rstrip()  # remove newline
    if ' name="' in row: # <case name=...>
        nm = row[row.index(' name="')+7:len(row)-2] # get name
    if "<Name>" in row and nm:  # <Name>....
        idx = row.index("<Name>") + 6
        strOut += row[:idx] + nm + "</Name>\n"  # set name field here
        nm = ""  # in case bad block, don't copy wrong name
    else:
        strOut += row + "\n"  # copy line to new string

print(strOut)

输出

<case classname="perf" name="device">
    <Type>GET</Type>
    <Name>device</Name>
    <Request>Something</Request>
</case>

<case2 name="device_n">
    <Type>GET</Type>
    <Name>device_n</Name>
    <Request>Something</Request>
</case2>

推荐阅读