2015-05-05 107 views
1

我想从大型文本文件中删除一些文本。 重点是找到一个字符串(html标签)并删除所有文本,直到标签结束。删除2个字符串之间的文本(html标签)

这就是我试图做的:

C:\>type sample.txt | findstr /r /<tag+[^?]+<\/tag>/g 

但OFC它不工作。

+0

什么是html标签?可以使用Windows内置的xml解析器轻松完成,但需要xpath – npocmaka

+0

标记为 Klajbar

+0

您是指所有字体标记? – npocmaka

回答

1

这个脚本(使用.bat扩展名保存)接受一个参数 - HTML file.It将在控制台打印(可被重定向到文件)文件去掉节点的内容。 不知道,如果你想删除的字体标签和它的内容,或只是标签:

@if (@X)==(@Y) @end /* JScript comment 
     @echo off 



     cscript //E:JScript //nologo "%~f0" %* 
     exit /b %errorlevel% 
@if (@X)==(@Y) @end JScript comment */ 

var ARGS = WScript.Arguments; 
var file=ARGS.Item(0); 

var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject"); 
//var objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP") 
//objXMLHTTP.open("GET", file); 
//objXMLHTTP.sent(); 

var readFile=FileSystemObj.OpenTextFile(file,1); 
var content=readFile.ReadAll(); 

var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0"); 
var oSelection; 
xmlDoc.setProperty("SelectionLanguage", "XPath"); 
xmlDoc.async = false; 
xmlDoc.loadXML(content); 

if (xmlDoc.parseError.errorCode != 0) { 
    var myErr = xmlDoc.parseError; 
    WScript.Echo("You have error " + myErr.reason); 
} else { 
    //WScript.Echo("Before removing <font> nodes:\n" + xmlDoc.xml + "\n"); 
    oSelection = xmlDoc.selectNodes("//font"); 
    oSelection.removeAll(); 
    //WScript.Echo("After removing <font> nodes:\n" + xmlDoc.xml + "\n"); 
    WScript.Echo(xmlDoc.xml); 
} 


//var doc=objXMLHTTP.responseXML; 
//var tags=doc.oXMLDOMElement.getElementsByTagName("font"); 
//var selection=doc.selectNodes("//font") 
//WScript.Echo(tags.Length); 
//selection.removeAll() 
1

下面是类似npocmaka的解决方案的另一种选择。它不使用需要HTML严格有效的XML DOM,而是使用COM对象htmlfile。这个方法并不要求所有的标签都像XML解析器一样被关闭。缺点是COM对象会对你的代码做一些奇怪的事情 - 大写所有标签名称,从参数周围去除引号,去除XHTML-ish <element />自闭合斜线等等。但修改后的页面仍应呈现相同的效果。

该脚本将覆盖您希望修改的文件。

@if (@CodeSection == @Batch) @then 

@echo off 
setlocal 

set "htmlfile=test.html" 

cscript /nologo /e:Jscript "%~f0" "%htmlfile%" 

goto :EOF 

@end // end batch/begin JScript chimera 

var DOM = WSH.CreateObject('htmlfile'), 
    fso = WSH.CreateObject('Scripting.FileSystemObject'), 
    file = fso.OpenTextFile(WSH.Arguments(0), 1), 
    html = file.ReadAll(), 
    doctype = (html.replace(/\r?\n/g,'').match(/<!doctype.*?>/i) || [''])[0]; 

file.Close(); 
DOM.write(html); 

var del = DOM.getElementsByTagName('font'); 

for (var i=del.length; --i>-1;) 
    del[i].parentNode.removeChild(del[i]); 

file = fso.CreateTextFile(WSH.Arguments(0), true); 
file.Write((doctype ? doctype + '\n' : '') + DOM.documentElement.outerHTML); 
file.Close(); 
DOM.close();