找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26520|回复: 13

[文本处理] [已解决]如何删除xml文件指定段落?

[复制链接]
发表于 2015-3-26 10:16:59 | 显示全部楼层 |阅读模式
本帖最后由 freesoft00 于 2015-11-2 20:29 编辑

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

文件是utf-8 无bom应该
删除指定的片段:
TCPIP Parameters
Current User
Network Connections
 楼主| 发表于 2015-3-26 10:19:54 | 显示全部楼层
我想纯批处理也许不好处理,不知道是否有第三方软件可以完成。
utf-8文本不好处理也可以转换为ansi,处理完成后再转换回去。
发表于 2015-3-26 12:18:56 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2015-3-26 13:10:34 | 显示全部楼层
本帖最后由 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" 比如这个
发表于 2015-3-26 13:15:53 | 显示全部楼层
本帖最后由 pcl_test 于 2015-3-26 13:30 编辑

回复 4# freesoft00
那你要把特征说明白,不然怎么匹配?在顶楼把要删除的内容段的特征描述清楚并上传一份完整的xml文件
发表于 2015-3-26 14:01:25 | 显示全部楼层
本帖最后由 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. }
复制代码

评分

参与人数 2技术 +2 收起 理由
freesoft00 + 1 感谢!
依山居 + 1 哈哈,版主可怜。

查看全部评分

发表于 2015-3-26 14:13:22 | 显示全部楼层
缩进得这么好的应该没问题
3 楼居然还考虑了 utf-8……
发表于 2015-11-2 09:12:02 | 显示全部楼层
万年神手党啊。
0几年号处理个文本还需要找人。
发表于 2015-11-2 09:27:01 | 显示全部楼层
能否把原文件传一份放上来。
 楼主| 发表于 2015-11-2 09:35:15 | 显示全部楼层
回复 9# 依山居


    好的,中午或者下午吧,有事需要外出一下。谢谢关注!
 楼主| 发表于 2015-11-2 16:23:20 | 显示全部楼层
回复 9# 依山居
例子文件我传到了一楼
发表于 2015-11-2 18:39:03 | 显示全部楼层
6楼已改
旧问题要求改来改去也是醉的,特么的文件那么大居然还不发网盘分享链接,那么请问你有按版规发帖否?
发表于 2015-11-2 19:22:12 | 显示全部楼层
回复 11# freesoft00


    大文件建议上传到网盘,方便下载。
 楼主| 发表于 2015-11-2 20:19:02 | 显示全部楼层
不好意思,没有仔细的看版规大附件上传的规定。不是有意如此。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:18 , Processed in 0.021154 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表