2010-10-23 8 views
6

Sto solo cercando un modo davvero semplice per pulire un po 'di codice HTML (possibilmente con codice JavaScript incorporato). Ho provato twodifferentHTML Tidy porte .NET ed entrambi stanno lanciando eccezioni ...Versione C# di HTML Tidy?

Spiacente, per "pulito" intendo "indent". L'HTML non è malformato, affatto. È XHTML rigoroso.


ho finalmente ha qualcosa a lavorare con SGML, ma questo è seriamente il pezzo più ridicola di codice mai per far rientrare il linguaggio HTML.

private static string FormatHtml(string input) 
{ 
    var sgml = new SgmlReader {DocType = "HTML", InputStream = new StringReader(input)}; 
    using (var sw = new StringWriter()) 
    using (var xw = new XmlTextWriter(sw) { Indentation = 2, Formatting = Formatting.Indented }) 
    { 
     sgml.Read(); 
     while (!sgml.EOF) 
      xw.WriteNode(sgml, true); 
    } 
    return sw.ToString(); 
} 
+0

Così si desidera solo per riformattare il codice sorgente? Puoi usare qualsiasi web-ide o Notepad ++ per questo. –

+0

@Nick: me ne rendo conto, ma io * non * sto provando a riformattare i file HTML che ho già .. Sto cercando di riformattare l'HTML che sto generando in un'app C# ... – mpen

+0

check HtmlTextWriter, ho aggiornato il mio risposta –

risposta

8

L'ultimo wrapper C# per HTML Tidy è stato realizzato da Mark Beaton, che sembra piuttosto aggiornato rispetto ai collegamenti a cui si fa riferimento (2003). Vale anche la pena notare che Mark mette a disposizione gli eseguibili per il riferimento, piuttosto che estrarli dal sito ufficiale. Questo dovrebbe fare il trucco di organizzare e convalidare bene il tuo HTML.

+2

Le build sono solo per tidylib, non per il wrapper C#. Avrai bisogno di costruire TidyManaged anche dal sorgente. Sono in esecuzione una macchina a 64 bit, ma solo la DLL di Tidylib a 32 bit funziona, per qualsiasi motivo. Ho dovuto metterlo in c:/windows/system. Inoltre, l'esempio fornito da Beaton non indurrà il tuo HTML - l'unica cosa che volevo - è necessario aggiungere 'doc.IndentBlockElements = AutoBool.Auto' ... un po 'difficile da capire. – mpen

+0

D'accordo, sono diventato piuttosto non bloccato dopo il passaggio a x64 e tidylib lancia un'eccezione "Si è verificata BadImageFormatException - È stato effettuato un tentativo di caricare un programma con un formato errato. (Eccezione da HRESULT: 0x8007000B)". Inserito un bug su TidyManaged https: // github.com/markbeaton/TidyManaged/issues/3 – wonea

+0

Sono riuscito a farlo funzionare su Windows 7 a 64 bit cambiando il progetto in x86 in Configuration Manager sia sul progetto TidyManaged sia sul mio progetto che lo fa riferimento e utilizzando la versione a 32 bit di libtidy.dll. – ChrisR

3

UPDATE:

Controllare HtmlTextWriter o XhtmlTextWriter, utilizzo: Formatting Html Output with HtmlTextWriter, forse HTML construction via HtmlTextWriter sarà meglio?

controllare anche: LINQ & Lambda, Part 3: Html Agility Pack to LINQ to XML Converter

http://www.manoli.net/csharpformat/, qui source code nel caso in cui non te ne accorgi.


Forse vuoi farlo da solo? Questo progetto può essere utile: Html Agility Pack

Che cos'è esattamente Html Agility Pack (HAP)?

Questo è un parser HTML agile che crea un DOM in lettura/scrittura e supporta XPATH o XSLT (in realtà NON DEVI comprendere XPATH o XSLT per usarlo, non preoccuparti ...). È una libreria di codice .NET che consente di analizzare file HTML "fuori dal web". Il parser è molto tollerante con l'HTML malformato del "mondo reale". Il modello a oggetti è molto simile a quello che propone System.Xml, ma per documenti HTML (o flussi).

Html Agility Pack supporta ora Linq to Objects (tramite un'interfaccia LINQ a Xml Like). Scopri la nuova versione beta di giocare con questa funzione

Esempi di applicazioni: fissaggio

  • pagina o generazione. Puoi correggere una pagina nel modo desiderato, modificare il DOM, aggiungere nodi, copiare i nodi, beh ... tu lo chiami.

  • Scanner Web. Puoi facilmente raggiungere img/src o a/hrefs con una serie di query XPATH.

  • Web scrapers. È possibile eliminare facilmente qualsiasi pagina Web esistente in un feed RSS ad esempio, con solo un file XSLT che funge da associazione. Un esempio di questo è fornito da .


Inoltre si può provare questa implementazione: A managed wrapper for the HTML Tidy library

+0

Ho sentito parlare e ho usato HtmlAgilityPack molto in passato..ma può riordinare HTML? – mpen

+0

HAP non è un sostituto di Tidy, ma può creare DOM per te e puoi elaborarlo di conseguenza. Inoltre non sono abbastanza intelligente da analizzare HTML malformato (se devi elaborare qualcosa di strano). A proposito, puoi definire un po 'meglio cosa intendi per "pulito", quali regole devono essere applicate? Inoltre puoi usare l'originale HTML Tidy (http://bit.ly/aahXs8) senza fare affidamento sul wrapper se hai solo bisogno di pulire alcuni file non regolarmente. –

+1

Non ho bisogno di elaborare il DOM, voglio solo indentarlo. Voglio in particolare una versione C# perché ho bisogno di usarlo nel mio progetto C#. Sto generando dell'HTML come stringa, voglio prendere quella stringa, farla rientrare e emettere un'altra stringa. Ne più ne meno. Ho pensato che sarebbe stato facile trovare una biblioteca per farlo. – mpen

1

ho usato SGML Reader a convertire HTML in XHTML in passato. Potrebbe valere la pena di esaminare ...

Non ho mai avuto problemi quando lo usavo.

+1

Ho esaminato. Non riesco a capire come ottenere una stringa indietro ... – mpen

+2

Dai un'occhiata a questo link: http://www.eggheadcafe.com/articles/20030317.asp –

+0

Un po 'ridicolo per formattare alcuni HTML, ma lo fa lavoro. Grazie :) – mpen