Board logo

标题: [文本处理] 批处理修改XML文件内容问题 [打印本页]

作者: zx289317972    时间: 2017-9-11 14:06     标题: 批处理修改XML文件内容问题

对于批处理,一直处于ping  tracert  ipconfig 阶段

现在想将
<?xml version="1.0" encoding="utf-8" ?>
<Root>
    <VerAll ver="11944" />
    <GameVer GameID="0" ver="18" />
   <GameVer GameID="404" ver="1006" />
   <GameVer GameID="504" ver="1007" />
</Root>
将其中的<GameVer GameID="404" ver="1006" />   改成 <GameVer GameID="404" ver="1007" />
------------------------------------------------------------------------------------------------------
输出新xml文本 或者在原文本上改
<?xml version="1.0" encoding="utf-8" ?>
<Root>
    <VerAll ver="11944" />
    <GameVer GameID="0" ver="18" />
   <GameVer GameID="404" ver="1007" />
   <GameVer GameID="504" ver="1007" />
</Root>
大神帮解解惑
作者: 3518228042    时间: 2017-9-11 15:59

  1. @set @n=0//&cscript -nologo -e:jscript "%~0"&pause&exit/b
  2. with (new ActiveXObject("ADODB.Stream")){
  3.     Type = 2;
  4.     Mode = 3;
  5.     CharSet = "utf-8";
  6.     Open();
  7.     LoadFromFile("测试.xml");
  8.     text = ReadText(-1);
  9.     text = text.replace(/(<GameVer GameID=\"404\" ver=\")1006(" \/>)/g,"$11007$2");
  10.     Position = 0;
  11.     WriteText(text);
  12.     SetEOS();
  13.     SaveToFile("保存.xml",2);
  14.     Close();
  15. };
复制代码
等人完善,瞎写的
作者: codegay    时间: 2017-9-11 16:47

本帖最后由 codegay 于 2017-9-11 16:49 编辑

用xmlstarlet
  1. C:\Users\root\Desktop\test>xml ed -u "Root/GameVer[@GameID=404]" -v "1000" gamver.xml
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <Root>
  4.   <VerAll ver="11944"/>
  5.   <GameVer GameID="0" ver="18"/>
  6.   <GameVer GameID="404" ver="1006">1000</GameVer>
  7.   <GameVer GameID="504" ver="1007"/>
  8. </Root>
复制代码
加上 --inplace 直接对原文件修改:
  1. xml ed -u "Root/GameVer[@GameID=404]" -v "1000" gamver.xml
复制代码

作者: codegay    时间: 2017-9-11 16:49

本帖最后由 codegay 于 2017-9-11 16:54 编辑

..。。哦。我理解错了。

正确改ver属性的值应该是
  1. xml ed --inplace -u "Root/GameVer[@GameID=404]/@ver" -v "1000" gamver.xml
复制代码
使用xmlstarlet需要有xml和xpath的知识。但是知识点不是很多。w3cshool上看一下应该就差不多了。
作者: zx289317972    时间: 2017-9-11 17:44

For /f "tokens=*" %%i in ('findstr "%a%" VersionInfo.xml') do (

        For /f "tokens=5 delims== " %%j in ("%%i") do (
            set str=%%j
                   set /a var=!str:~1,-1!
            set str=!str:var=var+=1!  
            set /a var+=1
    )
)
for /f "delims=" %%a in ('findstr "%a%" VersionInfo.xml')do (

    for /f "delims=" %%i in ('type "VersionInfo.xml"') do (
   
    if %%a==%%i (echo %str%>>VersionInfo1.xml)else echo %%i>>VersionInfo1.xml
    )
)

但好像只能取出来改完后,大神完善一下
作者: zx289317972    时间: 2017-9-11 17:47

回复 4# codegay

我通过for循环取出值,然后修改,写入xml 呢
作者: zx289317972    时间: 2017-9-11 17:49

回复 2# 3518228042


    谢谢,我先试试看,
作者: zhanglei1371    时间: 2017-9-11 19:34

下载个wfr:网址:http://baiy.cn/#命令行工具_wide_find_-_replace
  1. wfr *.txt -f:"<GameVer GameID=\"404\" ver=\"1006\" />" -t:"<GameVerGameID=\"404\" ver=\"1007\" />"
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2