标题: [文本处理] [已解决]批处理如何在xml文件指定节点/元素/标签内插入/添加两行内容 [打印本页]
作者: jamie 时间: 2017-4-28 18:46 标题: [已解决]批处理如何在xml文件指定节点/元素/标签内插入/添加两行内容
本帖最后由 pcl_test 于 2017-4-30 12:44 编辑
bat批处理于文件内区段插入两行指定内容,求教
有一 xyzxyz.xml文件内容约略如下- <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
- <map>
- <int name="Featured_Video_BottomID" value="436" />
- <int name="Featured_Video_FirstID" value="444" />
- <int name="Featured_Video_ID" value="443" />
- <int name="News0" value="3452" />
- <int name="News0_BottomID" value="3405" />
- <int name="News0_FirstID" value="3456" />
- <int name="News1" value="3405" />
- <int name="News1_BottomID" value="3405" />
- <int name="News1_FirstID" value="3444" />
- </map>
复制代码
需要在<map> ....... </map>区段内插入两行内容- <string name="apinfo">993684b8-801d-4b22-825c-db90e14b45a4</string>
- <string name="email">myname123@163.com</string>
复制代码
使其文件最终效果为- <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
- <map>
- <int name="Featured_Video_BottomID" value="436" />
- <int name="Featured_Video_FirstID" value="444" />
- <int name="Featured_Video_ID" value="443" />
- <int name="News0" value="3452" />
- <int name="News0_BottomID" value="3405" />
- <int name="News0_FirstID" value="3456" />
- <int name="News1" value="3405" />
- <int name="News1_BottomID" value="3405" />
- <int name="News1_FirstID" value="3444" />
- <string name="apinfo">993684b8-801d-4b22-825c-db90e14b45a4</string>
- <string name="email">myname123@163.com</string>
- </map>
复制代码
翻阅了一些同类型问答,大多是于文件尾端加上
请教各位这样的.bat该怎样书写才行?麻烦指教了!
作者: apython 时间: 2017-4-29 17:29
- @echo off
- for /f "delims=" %%i in (xyzxyz.xml) do (
- if not "%%i"=="</map>" echo,%%i
- )
- echo, ^<string name="apinfo"^>993684b8-801d-4b22-825c-db90e14b45a4^</string^>
- echo, ^<string name="email"^>myname123@163.com^</string^>
- echo,^</map^>
- pause
复制代码
作者: codegay 时间: 2017-4-29 20:24
xmlstarlet这个工具很好用的样子。
http://batch-cn.qiniudn.com/s/tool/index.html?key=xml
xpath http://www.w3school.com.cn/xpath/xpath_functions.asp#node
XmlStarlet Command Line XML Toolkit User's Guide http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html- D:\.cache>xml ed -a //map/int[last()] -t elem -n string -v test a.xml
- <?xml version="1.0" encoding="utf-8" standalone="yes"?>
- <map>
- <int name="Featured_Video_BottomID" value="436"/>
- <int name="Featured_Video_FirstID" value="444"/>
- <int name="Featured_Video_ID" value="443"/>
- <int name="News0" value="3452"/>
- <int name="News0_BottomID" value="3405"/>
- <int name="News0_FirstID" value="3456"/>
- <int name="News1" value="3405"/>
- <int name="News1_BottomID" value="3405"/>
- <int name="News1_FirstID" value="3444"/>
- <string>test</string>
- </map>
复制代码
作者: codegay 时间: 2017-4-29 20:24
XMLStarlet 使用入门
https://www.ibm.com/developerworks/cn/xml/x-starlet.html
作者: codegay 时间: 2017-4-29 20:32
PowerShell处理XML http://www.pstips.net/loading-and-processing-xml-files.html
作者: jamie 时间: 2017-4-30 03:39
本帖最后由 pcl_test 于 2017-4-30 08:28 编辑
回复 2# apython
抱歉再请教, 如果要将最终echo的结果输出到另一文件的话该怎么做?
作者: jamie 时间: 2017-4-30 03:45
本帖最后由 pcl_test 于 2017-4-30 08:27 编辑
回复 3# codegay 这边的格式不太对,我按着上方的操作a.xml却没有输出结果 :funk:
作者: apython 时间: 2017-4-30 05:20
回复 6# jamie - @echo off
- (for /f "delims=" %%i in (xyzxyz.xml) do (
- if not "%%i"=="</map>" echo,%%i
- )
- echo, ^<string name="apinfo"^>993684b8-801d-4b22-825c-db90e14b45a4^</string^>
- echo, ^<string name="email"^>myname123@163.com^</string^>
- echo,^</map^>
- ) >new.xml
- pause
复制代码
作者: pcl_test 时间: 2017-4-30 22:14
这种需求用正则替换比操作xml dom要简便些吧- @echo off
- powershell ^
- $file='测试.xml';$str='^<string name=\"apinfo\"^>993684b8-801d-4b22-825c-db90e14b45a4^</string^>';^
- $str+=\"`r`n\"+'^<string name=\"email\"^>myname123@163.com^</string^>'+\"`r`n\";^
- [IO.File]::ReadAllText($file, [Text.Encoding]::UTF8) -replace '(?=^</map^>)',$str^|^
- out-file ('New'+$file) -enc UTF8
- pause
复制代码
- //&cls&cscript -nologo -e:jscript "%~f0" "测试.xml"&pause&exit
-
- var file=WSH.Arguments(0);
- var arr=[['string','993684b8-801d-4b22-825c-db90e14b45a4','name','apinfo'],['string','myname123@163.com','name','email']];
- var xml=new ActiveXObject('Microsoft.XMLDOM');
- xml.async=false;
- xml.preserveWhiteSpace=true;
- xml.load(file);
- var map=xml.getElementsByTagName('map')[0];
- for(var i=0;i<arr.length;i++){
- var e=xml.createElement(arr[i][0]);
- e.text=arr[i][1];
- e.setAttribute(arr[i][2], arr[i][3]);
- map.appendChild(e);
- }
- xml.save('New_'+file);
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |