首页 > 解决方案 > 如何从 XML 中查找和提取某些字符串并在另一个 XML 文档中替换

问题描述

有人可以帮助我如何从 xml 中提取某些字符串并替换为另一个 xml。就像我只想从 1.XML 的第二行中提取 mediaId

- <sample_settings_config version="23" mediaId="0x6868"> 

并在 2.xml 文档中替换它(两个 XML 的代码都相同,除了 mediaId)。

由于 1.xml 位置是动态的(C:\users\xxxx\Documents),所以我正在寻找追加、查找提取和替换。:(

我正在尝试 Python 或批处理脚本。

在这个批处理脚本中苦苦挣扎

setlocal EnableDelayedExpansion

(Set UPD=C:\Users)

(Set UDS=\RAP\Documents\MB)

For /F "delims=" %%a in ('findstr /I /L "mediaId" 1.xml') do (
   set "line=%%a"
   set "line=!line:*<string>=!"
   for /F "delims=<" %%b in ("!line!") do echo %%b

但它不起作用,感谢任何帮助,谢谢。

标签: pythonxmlbatch-fileautomation

解决方案


from xml.etree.ElementTree import ElementTree

tree = ElementTree()

tree.parse("1.xml")
root = tree.getroot()
media_id = root.find('sample_settings_config').attrib['mediaId']

tree.parse("2.xml")
root = tree.getroot()
root.find('sample_settings_config').attrib['mediaId'] = media_id
tree.write('2.xml', xml_declaration=True)

您可以xml.etree.ElementTree通过使用 Python 来读取和写入 XML。

代码导入ElementTree并创建一个实例为tree. 从tree,解析 XML 文件并获取root. 然后,找到标签 sample_settings_config并获取 的属性值mediaId

重复解析,获取root并找到标签。mediaId用存储在变量中的值更新字典键media_id。将修改后的内容写入 XML 文件。

1.xml

<?xml version='1.0' encoding='us-ascii'?>
<root>
  <sample_settings_config version="123" mediaId="0x6868">
    "XML File 1"
  </sample_settings_config>
</root>

2.xml

<?xml version='1.0' encoding='us-ascii'?>
<root>
  <sample_settings_config version="456" mediaId="0x0">
    "XML File 2"
  </sample_settings_config>
</root>

2.xml修改

<?xml version='1.0' encoding='us-ascii'?>
<root>
  <sample_settings_config mediaId="0x6868" version="456">
    "XML File 2"
  </sample_settings_config>
</root>

推荐阅读