2009-09-21 6 views
5

La mia intenzione è quella di modificare documenti HTML, compresa la modifica di elementi esistenti, l'eliminazione di elementi e l'inserimento di nuovi.Dove posso trovare un buon tutorial/riferimento HTMLEditorKit, che spiega in realtà come modificare i documenti HTML?

Ho letto la documentazione di HTMLEditorKit e le relative classi, oltre all'argomento pertinente in Java's Trail di Sun, ma ci sono pochissime informazioni sulla reale manipolazione del documento HTML. La maggior parte della discussione e degli esempi riguardano la lettura e l'analisi dell'HTML, non la modifica. Alcuni googlati non hanno ancora fornito una soluzione adeguata, e il tentativo di affrontare l'attività con alcuni tentativi ed errori di codifica ha comportato per lo più eccezioni.

Ho passato le domande e le risposte correlate qui in SO, ma la maggior parte delle risposte suggeriva un'alternativa, mentre sto cercando una soluzione nel JDK. Forse HTMLEditorKit è di scarsa utilità per le applicazioni non swing, e c'è un'alternativa al di fuori di javax.swing?

Ecco alcuni compiti che mi piacerebbe imparare a eseguire:

  • sostituire il testo in alcuni campi di testo.
  • Modifica di base (trova/sostituisci o regex) di <script> elementi.
  • Colorare il bordo di determinati elementi.
  • Rimuovere alcuni tag completamente (per gli elementi flash di esempio ).

Supponendo che HTMLEditorKit sia il miglior componente di modifica HTML nel JDK, quale esercitazione o riferimento si consiglia?

+0

Stai creando un editor visuale o è corretto modificare la struttura HTML in memoria? – Mark

+0

Ho intenzione di modificare in memoria. –

risposta

2

HTMLEditorKit non è un editor HTML ma un editor per modelli di documenti che consente di convertire questi modelli di documento da e in HTML. Il modello interno del kit di editor è non "HTML" ma è basato su DefaultStyledDocument. Ciò che ti confonde è che esiste una classe HTMLDocument. Ma questo è solo un involucro sottile per il DefaultStyledDocument in modo che possa essere creato da HTML e salvato come HTML.

Quello che ti serve è un parser HTML. Prova jTidy. Leggerà l'HTML, costruirà un modello interno (mantenendo cose come <script> che verrà ignorata da HTMLEditorKit). È quindi possibile utilizzare un'API DOM per modificare il modello.

Detto questo, per molti casi di utilizzo, è sufficiente filtrare l'HTML con le espressioni regolari o la ricerca di stringa semplice & sostituire.

+0

Peccato, speravo che ci fosse una soluzione nel JDK. Sto cercando di evitare strumenti esterni, quindi considererò prima una soluzione di ricerca/sostituzione. Grazie! –

+0

'HTMLDocument' contiene effettivamente un albero simile a DOM. È progettato per conservare tutto ciò che non capisce ma non rimuove il tag '

2

Io non so voi, ma credo che se la pagina html che si sta tentando di manipolare non è molto complicato allora si può costruito da soli così:

HTMLDocument doc = new HTMLDocument(); 

HTMLEditorKit kit = new HTMLEditorKit(); 

jEditorPane.setDocument(doc); 

jEditorPane.setEditorKit(kit); 

kit.insertHTML(doc, doc.getLength(), "<label> This label will be inserted inside the body directly </label>", 0, 0, null); 
kit.insertHTML(doc, doc.getLength(), "<br/>", 0, 0, null); 
kit.insertHTML(doc, doc.getLength(), putYourVariableHere, 0, 0, null); 

questo modo è possibile avere il pieno controllo su html ed è più veloce da caricare rispetto al caricamento da un html esterno.

0

Non lo so se esiste un'esercitazione sull'uso di HTMLDocument e HTMLEditorKit per la modifica di documenti HTML in Java. L'implementazione di JDK è alquanto limitata, ma internamente crea un albero di elementi simili a DOM.È possibile accedere alla albero dal HTMLDocument utilizzando getRootElements() metodo:

Element html = doc.getRootElements()[0]; 

Qui doc è un'istanza di HTMLDocument. Io non credo che sia facile da modificare HTML con HTMLDocument ma è possibile, consultare i seguenti metodi:

Tutti questi metodi accettano Element come punto di riferimento in cui avviene la modifica. Puoi camminare sulla struttura ad albero degli elementi usando i suoi metodi, e ti ho mostrato come ottenere il riferimento alla radice dell'albero.

Utilizzando questi metodi è possibile scrivere un editor HTML visuale. Solo per mostrare il tuo modello HTML, chiama il metodo setEditable(false) sull'oggetto JEditorPane.

Per un esempio molto semplice su come si può manipolare il contenuto di HTML caricati in JEditorPane con HTMLDocument modello, vedere my sample application nella risposta alla another HTML-related question, in particolare il codice di propertyChange anche gestore.

Anche se per avere più controllo sull'HTML, raccomanderei l'uso di una libreria che crea il DOM HTML e consente di modificarlo.