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

例如:1.xml<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><root><composeid="10001"n... 例如: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里面的数据。

求帮助啊!
展开
 我来答
IP大神
2014-12-17 · TA获得超过614个赞
知道小有建树答主
回答量:1513
采纳率:50%
帮助的人:547万
展开全部
首先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
匿名用户
2014-12-17
展开全部
匿名,0分,我来帮大伙探探路吧……

提问者ID:坚定信念Comeon
等级:LV1
回答数:0
综上,极有可能是伸手党,各位慎入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
acer_walker
2014-12-17
知道答主
回答量:1
采纳率:0%
帮助的人:1288
展开全部
@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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式