2016-05-21 16 views
0

Ich weiß, diese Frage ist eine Art allgemein, aber ich mache eine Erweiterung zu meiner Windows 10-Eingabeaufforderung, so dass Sie HTML als einfachen Text innerhalb des Programms anzeigen können. Ich weiß nicht, ob es als faul angesehen würde, für so etwas keinen Interpreter zu bauen, aber es scheint einfach zu viel Arbeit für etwas zu sein, das ich nur benutzen werde. Einen Interpreter für eine Auszeichnungssprache zu erstellen, von der ich wenig weiß, scheint unnötig zu sein, und es wäre noch schwieriger, sie in Batch zu machen.Wie speichere ich HTML-Dateien als nicht formatierten Text, nicht als Code, mit einer Programmiersprache?

Ich weiß, wie man aus Dateien liest und sie als Variable speichert, aber meine Frage wäre, wie man Roh-HTML als einfachen Text ohne Formatierung speichern kann. Zum Beispiel

<p>Here's some text.</p> 

würde:

Here's some text. 

ich einen Dolmetscher möchte den HTML-Code in Klartext konvertieren. Es muss nicht in Batch geschrieben werden, aber es ist in Ordnung, wenn es ist. Ich würde es jedoch vorziehen, es in eine besser entwickelte Sprache zu schreiben, wie zum Beispiel Python, das ich früher benutzt habe, um Programmiersprachen zu interpretieren. Es muss nicht von Ihnen geschrieben werden, daher wäre eine Überweisung in Ordnung.

Entschuldigung, wenn ich mir die Zeit nahm zu erklären. Selbst eine Teillösung wäre in Ordnung. Danke für die Hilfe!

+0

Wenn eine der folgenden Antworten hilfreich war, sollten Sie eine auswählen, die als akzeptiert markiert wird. [Siehe diese Seite] (http://meta.stackexchange.com/questions/5234/) für eine Erklärung, warum dies wichtig ist. – rojo

Antwort

0

In der Zukunft zeigen Sie bitte Code, um zu demonstrieren, dass Sie versucht haben, das Problem selbst zu lösen. Fragen, die ähneln, "Hier sind meine Anforderungen. Jetzt schreibe es für mich oder finde mich ein Werkzeug" werden in der Regel hier nicht gut aufgenommen.

Aber teilweise, um weitere halbe Antworten zu vermeiden und teilweise, weil ich die Herausforderung genoss, hier ist eine Lösung geschrieben als ein Hybrid Batch + JScript Skript, das die innerText Ihres HTML auf die Konsole schreiben wird. Speichern Sie es mit einer BAT-Erweiterung. Wenn die Ausgabe stattdessen in eine Datei gehen soll, dann batscript.bat htmlfile > outfile.txt in der cmd-Zeile.

@if (@CodeSection == @Batch) @then 
@echo off & setlocal 

if "%~1"=="" goto usage 
if not exist "%~1" goto usage 

cscript /nologo /e:JScript "%~f0" "%outfile%" < "%~1" 
goto :EOF 

:usage 
2>&1 echo Usage: %~nx0 htmlfile 
goto :EOF 

@end // end Batch/begin JScript 

var htmlfile = WSH.CreateObject('htmlfile'); 

htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />'); 
htmlfile.write(WSH.StdIn.ReadAll()); 

WSH.Echo(htmlfile.documentElement.innerText); 
htmlfile.close(); 

IE9 Kompatibilitätsmodus aufgerufen Typen mehr HTML-Element zu erkennen als ohne, während immer noch Vista-Kompatibilität ermöglicht. Sie können IE=9 bei Bedarf auf 10, 11 oder Edge ändern.


Wenn Sie einen Nicht-Hybrid-Skript bevorzugen würden, können Sie auch das htmlfile COM-Objekt unter Verwendung von Powershell konstruieren.Es ist langsamer auszuführen, aber es ist einfacher Code (ungerade .NET-ish-Methodennamen ungeachtet). Beispiele:

.bat Script:

@echo off & setlocal 

if "%~1"=="" goto usage 
if not exist "%~1" goto usage 

set "htmlfile=%~f1" 

set "psCommand="^ 
    $h=new-object -COM htmlfile;^ 
    $h.IHTMLDocument2_write('^<meta http-equiv="x-ua-compatible" content="IE=9" /^>');^ 
    $h.IHTMLDocument2_write(${%htmlfile%});^ 
    $h.documentElement.innerText"" 

powershell -noprofile -noninteractive %psCommand% 

goto :EOF 

:usage 
echo Usage: %~nx0 htmlfile 
goto :EOF 

.ps1 Script:

param($htmlfile = $false) 

if (-not (test-path $htmlfile)) { 
    [console]::Error.WriteLine("Usage: $($MyInvocation.MyCommand.Name) htmlfile") 
    exit 
} 

$html = gc $htmlfile | out-string 
$hObj = new-object -COM htmlfile 
$hObj.IHTMLDocument2_write('<meta http-equiv="x-ua-compatible" content="IE=9" />') 
$hObj.IHTMLDocument2_write($html) 
$hObj.documentElement.innerText 
$hObj.Close() 

(Beispiel der Verwendung der .ps1 Lösung: powershell .\scriptname.ps1 htmlfile.html)


Und weil ich bin Dies ist für die persönliche Herausforderung, hier ist eine Batch + HTA Hybrid-Variante, die die innerText ungespeichert in ein neues Editor-Fenster, weil ich kann.

<!-- : batch portion 
@echo off & setlocal 

if "%~1"=="" goto usage 
if not exist "%~1" goto usage 

mshta "%~f0" < "%~1" 
goto :EOF 

:usage 
2>&1 echo Usage: %~nx0 htmlfile 
goto :EOF 

end Batch/begin HTA --> 

<meta http-equiv="x-ua-compatible" content="IE=9" /> 
<div id="out"></div> 

<script> 
var fso = new ActiveXObject('Scripting.FileSystemObject'), 
    osh = new ActiveXObject('WScript.Shell'), 
    notepad = osh.Exec('notepad'); 

document.getElementById('out').innerHTML = fso.GetStandardStream(0).ReadAll(); 
clipboardData.setData('text', document.getElementById('out').innerText); 

var waitActive = setInterval(function() { 
    if (osh.AppActivate(notepad.ProcessID)) { 
     clearInterval(waitActive); 
     close(osh.SendKeys('^v')); 
    } 
}, 25); 

</script> 

verwendet I HTA Browser-Sicherheit zu verhindern Schreibzugriff auf die Zwischenablage zu umgehen (wie bei dem htmlfile COM-Objekt geschieht), und weil HTA hat eine geringeres Gewicht und weniger wahrscheinlich als einen unsichtbaren laufenden Prozess, um am Ende als ein InternetExplorer.Application COM-Objekt

0

PHP hat strip_tags und kann auch über die Befehlszeile ausgeführt werden.

$url = 'http://www.somedoma.in/some_file.htm'; 
$website = file_get_contents($url); 
echo strip_tags($website); 

Dann können Sie php.exe verwenden das Skript auszuführen.

+0

Bitte geben Sie einen Beispielcode ein ... – aschipfl

0
Set ie = CreateObject("InternetExplorer.Application") 
ie.Visible = 0 
ie.Silent = 1 
ie.Navigate2 "file://" & FilterPath & "Filter.html" 

Do 
    wscript.sleep 50    
Loop Until ie.document.readystate = "complete" 

ie.document.body.innerhtml = Inp.readall 
Outp.write ie.document.body.innertext 

'ie.quit 

InP.ReadAll ist der HTML-Text in einem Textstream-Objekt, OutP Klartext in einer anderen Textstream-Objekt enthält.

Navigieren Sie zu einer lokalen Datei, um Sicherheitsdialoge und -einschränkungen zu entfernen. Ersetzen Sie den Text dieser Datei (nur im Speicher) durch Ihren HTML-Text (ie.document.body.innerhtml = Inp.readall). Dann lies es zurück und schreibe es als Text aus (Outp.write ie.document.body.innertext).

InP und OutP sind nicht im obigen Code snippit definiert, aber sie sind Text Stream Objekte.