2009-09-21 4 views
5

Mi intención es editar documentos HTML, incluso modificar elementos existentes, eliminar elementos e insertar nuevos.¿Dónde puedo encontrar un buen tutorial/referencia HTMLEditorKit, que en realidad explica cómo editar documentos HTML?

He leído HTMLEditorKit y la documentación de las clases relacionadas, así como también el tema relevante en Java Trail de Sun, aunque hay muy poca información sobre la manipulación real de documentos HTML. La mayoría de las discusiones y ejemplos se refieren a leer y analizar HTML, y no a editarlo realmente. Algunos de Google todavía no ofrecían una solución adecuada, y tratar de abordar la tarea con un poco de prueba y error de codificación resultó en excepciones.

He revisado aquí las preguntas y respuestas relacionadas en SO, pero la mayoría de las respuestas sugirieron alguna alternativa, mientras estoy buscando una solución en el JDK. Quizás HTMLEditorKit sea de poca utilidad para aplicaciones que no funcionan, y existe una alternativa fuera de javax.swing?

Estas son algunas tareas que me gustaría aprender a realizar:

  • reemplazar texto en ciertos campos de texto.
  • Edición básica (buscar/reemplazar o regexes) de elementos <script>.
  • Coloree el borde de ciertos elementos.
  • Elimine ciertas etiquetas por completo (para elementos de flash de ejemplo ).

Suponiendo que HTMLEditorKit es el mejor componente de edición de HTML en el JDK, ¿qué tutorial o referencia recomienda?

+0

¿Está creando un editor visual o está bien editar la estructura HTML en la memoria? – Mark

+0

Tengo la intención de editar en la memoria. –

Respuesta

2

HTMLEditorKit no es un editor de HTML sino un editor de modelos de documento que permite convertir estos modelos de documentos desde y hacia HTML. El modelo interno del kit de editor es no "HTML", pero se basa en DefaultStyledDocument. Lo que te confunde es que hay una clase HTMLDocument. Pero eso es solo una envoltura delgada para el DefaultStyledDocument, por lo que se puede crear a partir de HTML y guardarse como HTML.

Lo que necesita es un analizador de HTML. Pruebe jTidy. Leerá el HTML, construirá un modelo interno (manteniendo cosas como <script> que HTMLEditorKit ignorará). A continuación, puede usar una DOM API para modificar el modelo.

Dicho esto, para muchos casos de uso, es suficiente filtrar el HTML con expresiones regulares o buscar cadenas simples & reemplazar.

+0

Lástima, esperaba que hubiera una solución en el JDK. Estoy tratando de evitar herramientas externas, así que consideraré una solución de búsqueda/reemplazo primero. Gracias! –

+0

'HTMLDocument' en realidad contiene un árbol similar a DOM. Está diseñado para preservar todo lo que no comprende, pero no eliminaría la etiqueta '

2

No sé ustedes, pero yo creo que si la página HTML que está intentando manipular no es muy complicado que se puede construir por sí mismo de esa manera:

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); 

esa manera usted puede tener plena controla el html y es más rápido de cargar que cargarlo desde un html externo.

0

No existe ningún tutorial sobre el uso de HTMLDocument y HTMLEditorKit para editar documentos HTML en Java. La implementación de JDK es algo limitada, pero internamente crea un árbol de elementos similar a DOM.Puede acceder al árbol de HTMLDocument usando getRootElements() método:

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

Aquí doc es una instancia de HTMLDocument. Creo que no es fácil de editar HTML con HTMLDocument pero es posible, consulte los siguientes métodos:

Todos estos métodos aceptan Element como punto de referencia donde se lleva a cabo la edición. Puede recorrer la estructura de árbol de elementos utilizando sus métodos, y le mostré cómo obtener la referencia a la raíz del árbol.

Usando estos métodos, puede escribir un editor de HTML visual. Solo para mostrar su modelo HTML, llame al método setEditable(false) en el objeto JEditorPane.

Para un ejemplo muy sencillo de cómo se puede manipular el contenido de HTML cargados en JEditorPane con HTMLDocument modelo, ver my sample application en la respuesta a another HTML-related question, en particular, el código de propertyChange incluso manejador.

Aunque para tener más control sobre el HTML, recomendaría usar una biblioteca que crea HTML DOM y permite modificarlo.

Cuestiones relacionadas