如何从XML查找和提取特定字符串并替换为另一个XML文档

时间:2019-05-27 11:52:05

标签: python xml batch-file automation

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

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

并将其替换为2.xml文档(除了mediaId外,两个XML的代码都相同)。

由于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

但是它不起作用,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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>