python - 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?
这应该是某种迭代器,因为我有很多案例。
解决方案
使用正则表达式可能有更聪明的方法,但基本的字符串搜索似乎有效:
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>
推荐阅读
- flutter - 如何在颤动中使用 CupertinoPageRoute 和命名路由?
- angular - 构建项目时在 Visual Studio 的 ionic web 应用程序中运行“ionic serve”
- azure-active-directory - 限制 Microsoft Graph(或 Azure AD Graph)读取权限
- python - python:解析字典中的列表
- c# - ComoBox DropDownClosed 在初始化 Xaml 时抛出异常
- javascript - 我试图在 discord.js 中扮演 auto 角色,但它不起作用
- r - 查找 R 中 dplyr 参与者的调查数据是否跨年一致
- apache - 将所有版本的 URL 重定向到 https://www
- pyspark - 如果我的数据无法放入内存,请执行 EDA 并将其可视化?我的数据集大小是 200gigs
- angular - angular *ngIf 检查是否选择了选择标签中的最后一个选项