2015-05-05 3 views
1

Я хотел бы удалить текст из большого текстового файла. Главное, чтобы найти строку (html-тег) и удалить весь текст до конца тега.Удалить текст между двумя строками (html tags)

Это то, что я пытался сделать:

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

Но OFC ее не работает.

+0

и что такое HTML тег? Может быть сделано легко с помощью окон, встроенных 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 в. Вместо использования XML DOM, который требует строгого действия вашего HTML, он использует 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(); 
Смежные вопросы