Board logo

标题: [文本处理] [已解决]如何删除xml文件指定段落? [打印本页]

作者: freesoft00    时间: 2015-3-26 10:16     标题: [已解决]如何删除xml文件指定段落?

本帖最后由 freesoft00 于 2015-11-2 20:29 编辑

文件的内容大致如上,xml文本中的一段(我不知道是不是这样的叫法)

文件是utf-8 无bom应该
删除指定的片段:
TCPIP Parameters
Current User
Network Connections
作者: freesoft00    时间: 2015-3-26 10:19

我想纯批处理也许不好处理,不知道是否有第三方软件可以完成。
utf-8文本不好处理也可以转换为ansi,处理完成后再转换回去。
作者: pcl_test    时间: 2015-3-26 12:18

本帖最后由 pcl_test 于 2015-3-26 12:45 编辑

回复 2# freesoft00
意思是删除有这样特征的内容段?
开头<NODE NAME="SUBSECTION"
……
结尾</NODE>
  1. ::测试前先备份原文件
  2. @echo off & setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in  ('dir /b *.xml') do (
  4. set n=0
  5. (for /f "delims=" %%b in  ('type "%%a"') do (
  6. set "str=%%b"
  7. set "str=!str: =!"
  8. set "str=!str:锘?=!"
  9. if "!str:~1,21!" == "NODENAME="SUBSECTION"" set n=1
  10. if "!str:~1,5!" == "/NODE" set n=0
  11. if "!str:~1,5!" neq "/NODE" if !n! ==0 echo,%%b
  12. )
  13. echo,  ^</NODE^>
  14. )>$
  15. move $ "%%a"
  16. )
  17. pause
复制代码

作者: freesoft00    时间: 2015-3-26 13:10

本帖最后由 freesoft00 于 2015-3-26 13:12 编辑

回复 3# pcl_test


    <NODE NAME="SUBSECTION" VALUE="hosts"完整的关键字应该是这个,还有这个 <NODE NAME="SUBSECTION" VALUE="User"
单纯的<NODE NAME="SUBSECTION"有好多是不需要删除的,所以这样不行。
也许还有其它的关键字,<NODE NAME="network" 比如这个
作者: pcl_test    时间: 2015-3-26 13:15

本帖最后由 pcl_test 于 2015-3-26 13:30 编辑

回复 4# freesoft00
那你要把特征说明白,不然怎么匹配?在顶楼把要删除的内容段的特征描述清楚并上传一份完整的xml文件
作者: pcl_test    时间: 2015-3-26 14:01

本帖最后由 pcl_test 于 2015-11-2 18:35 编辑

回复 4# freesoft00
  1. /*&cls
  2. @echo off
  3. dir /b 151104.xml|cscript -nologo -e:jscript "%~f0"
  4. pause&exit/b
  5. */
  6. function loadText(strFileIn,strCharset){
  7. var stream = new ActiveXObject('ADODB.Stream');
  8. stream.Type = 2;
  9. stream.Mode = 3;
  10. stream.Charset = strCharset;
  11. stream.Open();
  12. stream.LoadFromFile(strFileIn);
  13. stream.Position = 0;
  14. return stream.ReadText;
  15. }
  16. function saveText(strArg,strFileOut,strCharset){
  17. var stream = new ActiveXObject('ADODB.Stream');
  18. stream.Mode = 3;
  19. stream.Type = 2;
  20. stream.Charset = strCharset;
  21. stream.Open();
  22. stream.WriteText(strArg);
  23. return stream.SaveToFile(strFileOut,2);
  24. }
  25. while(!WScript.StdIn.AtEndOfStream){
  26.     var file = WScript.StdIn.ReadLine();
  27.     var HtmlText = loadText(file,'utf-8');
  28.     var HtmlText = HtmlText.replace(/<NODE\sNAME="SUBSECTION"[^>]+?TR="V=4622"\sEVAL="5">[\s\S]+?\n\s\s<\/NODE>/,'');
  29.     var HtmlText = HtmlText.replace(/<NODE\sNAME="SUBSECTION"[^>]+?TR="V=4118"\sEVAL="5">[\s\S]+?\n\s\s<\/NODE>/,'');
  30.     var HtmlText = HtmlText.replace(/<NODE\sNAME="SECTION"[^>]+?TREE_ICON="2"\sEVAL="1">[\s\S]+?\n\s<\/NODE>/,'');
  31.     saveText(HtmlText,'./new_'+file,'utf-8');
  32. }
复制代码

作者: CrLf    时间: 2015-3-26 14:13

缩进得这么好的应该没问题
3 楼居然还考虑了 utf-8……
作者: 依山居    时间: 2015-11-2 09:12

万年神手党啊。
0几年号处理个文本还需要找人。
作者: 依山居    时间: 2015-11-2 09:27

能否把原文件传一份放上来。
作者: freesoft00    时间: 2015-11-2 09:35

回复 9# 依山居


    好的,中午或者下午吧,有事需要外出一下。谢谢关注!
作者: freesoft00    时间: 2015-11-2 16:23

回复 9# 依山居
例子文件我传到了一楼
作者: pcl_test    时间: 2015-11-2 18:39

6楼已改
旧问题要求改来改去也是醉的,特么的文件那么大居然还不发网盘分享链接,那么请问你有按版规发帖否?
作者: DAIC    时间: 2015-11-2 19:22

回复 11# freesoft00


    大文件建议上传到网盘,方便下载。
作者: freesoft00    时间: 2015-11-2 20:19

不好意思,没有仔细的看版规大附件上传的规定。不是有意如此。




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