如何用批处理比较替换2个xml文件内容?

例如:1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<root>
<compose id="10001" name="Superior Stone Material" produce_type="7"/>
<compose id="10002" name="Superior Jade" produce_type="7"/>
<compose id="10003" name="Superior Iron Ore" produce_type="7"/>
<compose id="10004" name="Superior Silver Ore" produce_type="7"/>
<compose id="10005" name="Superior Gold Ore" produce_type="7"/>
<compose id="10006" name="High-quality Stone Material" produce_type="7"/>
<compose id="10007" name="High-quality Jade" produce_type="7"/>
<compose id="10008" name="High-quality Iron Ore" produce_type="7"/>
<compose id="n" name="High-quality Silver Ore" produce_type="7"/>
</root>
2.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<root>
<compose id="990156" name="香甜腊八粥" produce_type="903" />
<compose id="990157" name="迎春年糕" produce_type="903" />
<compose id="990158" name="什锦年糕" produce_type="903" />
<compose id="990159" name="呈祥年糕" produce_type="903" />
<compose id="990160" name="满堂年糕" produce_type="903" />
<compose id="990161" name="登科年糕" produce_type="903" />
<compose id="990162" name="福宁年糕" produce_type="903" />
<compose id="990163" name="永福饺子" produce_type="903" />
<compose id="990164" name="高升饺子" produce_type="903" />
<compose id="990165" name="盛世饺子" produce_type="903" />
<compose id="990166" name="金玉饺子" produce_type="903" />
<compose id="n" name="腾欢饺子" produce_type="903" />
</root>
比较1.xml 和2.xml文件里,如果id值相同,就把2.xml里id值相同的那行数据的替换1.xml里面的数据。

求帮助啊!

首先produce_type="903"这个可以直接通过替换的方式直接替换掉

关键部分就是ID相同的时候替换name的内容
我是用两个批处理结合实现的
首先是第一个
@echo off&setlocal enabledelayedexpansion
for /f "skip=2 tokens=3 delims== " %%b in ('type 1.xml') do (for /f "tokens=3 delims== " %%a in ('type 2.xml') do if %%a == %%b set b=%%b&&for /f tokens^=4^ delims^=^" %%c in ('findstr !b! 1.xml') do set c=%%c&for /f tokens^=4^ delims^=^" %%d in ('findstr !b! 2.xml') do set d=%%d&&call H.bat "!c!" "!d!"
)
它会比对id的值,将出现相同的值发送到另一个批处理 H.bat
里面内容如下:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%l in ('type "1.xml"')do set setin=%%l&set change=!setin:%1=%2!&echo !change!>>new.txt
copy new.txt 1.xml
del new.txt /s /q
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-17
匿名,0分,我来帮大伙探探路吧……

提问者ID:坚定信念Comeon
等级:LV1
回答数:0
综上,极有可能是伸手党,各位慎入。
第2个回答  2014-12-17
@echo off
setlocal enabledelayedexpansion
findstr "compose" 1.xml>content1.txt
rem findstr "compose" 2.xml>content2.txt

for /f tokens^=1-7^ delims^=^" %%a in (2.xml) do (
set exist_%%b=1
set "id_%%b=%%b"
set "name_%%b=%%d"
set "produce_type_%%b=%%f"
)

>3.xml (
echo ^<?xml version="1.0" encoding="UTF-8" standalone="yes" ?^>
echo ^<root^>
for /f tokens^=1-7^ delims^=^" %%a in (content1.txt) do (
if !exist_%%b! EQU 1 (
echo %%a"!id_%%b!"%%c"!name_%%b!"%%e"!produce_type_%%b!"%%g
) else (
echo %%a"%%b"%%c"%%d"%%e"%%f"%%g
)
)
echo ^</root^>
)
del content1.txt
rem del content2.txt
相似回答