Bonjour,
Je cherche désespéremment une façon SIMPLE de parser, mais surtout
créer un fichier HTML dans une structure reprenant les interfaces
"org.w3c.dom.html". Je ne trouve même pas d'implémentations de ces
interfaces ; je ne vais quand même pas les développer moi-même, si ?
Ou alors il y a une astuce...
J'ai pensé à regarder du côté de JAXP, mais ne suis pas sûr de
comprendre comment récupérer des objets implémentant spécifiquement
les interfaces en question.
Merci de vos infos, bonne continuation, Thomas.
Bonjour,
Je cherche désespéremment une façon SIMPLE de parser, mais surtout
créer un fichier HTML dans une structure reprenant les interfaces
"org.w3c.dom.html". Je ne trouve même pas d'implémentations de ces
interfaces ; je ne vais quand même pas les développer moi-même, si ?
Ou alors il y a une astuce...
J'ai pensé à regarder du côté de JAXP, mais ne suis pas sûr de
comprendre comment récupérer des objets implémentant spécifiquement
les interfaces en question.
Merci de vos infos, bonne continuation, Thomas.
Bonjour,
Je cherche désespéremment une façon SIMPLE de parser, mais surtout
créer un fichier HTML dans une structure reprenant les interfaces
"org.w3c.dom.html". Je ne trouve même pas d'implémentations de ces
interfaces ; je ne vais quand même pas les développer moi-même, si ?
Ou alors il y a une astuce...
J'ai pensé à regarder du côté de JAXP, mais ne suis pas sûr de
comprendre comment récupérer des objets implémentant spécifiquement
les interfaces en question.
Merci de vos infos, bonne continuation, Thomas.
Bjour,
En premier, pour rappel HTML n'est pas du XML, donc utiliser JAXP (un
parseur XML "classique") risque d'avoir beaucoup de difficulité ...
Va voir :
http://java-source.net/open-source/html-parsers
1er resultat sous Google avec "HTML java parser" ;-)
Ya un bail, j'avait utilisé JTidy dans un projet et j'en étais trés
satisfait, mais depuis il y a foule, à toi d'utiliser celui que tu
préfère.
Dans tous les cas, si tu veux manipuler facilement le DOM (via XPATH ou
des appels simples en Java), oublie les interfaces du DOM W3C et passe
plutôt par les classiques du genre : DOM4J ou JDOM ...
A+
TMBonjour,
Je cherche désespéremment une façon SIMPLE de parser, mais surtout
créer un fichier HTML dans une structure reprenant les interfaces
"org.w3c.dom.html". Je ne trouve même pas d'implémentations de ces
interfaces ; je ne vais quand même pas les développer moi-même, si ?
Ou alors il y a une astuce...
J'ai pensé à regarder du côté de JAXP, mais ne suis pas sûr de
comprendre comment récupérer des objets implémentant spécifiquement
les interfaces en question.
Merci de vos infos, bonne continuation, Thomas.
Bjour,
En premier, pour rappel HTML n'est pas du XML, donc utiliser JAXP (un
parseur XML "classique") risque d'avoir beaucoup de difficulité ...
Va voir :
http://java-source.net/open-source/html-parsers
1er resultat sous Google avec "HTML java parser" ;-)
Ya un bail, j'avait utilisé JTidy dans un projet et j'en étais trés
satisfait, mais depuis il y a foule, à toi d'utiliser celui que tu
préfère.
Dans tous les cas, si tu veux manipuler facilement le DOM (via XPATH ou
des appels simples en Java), oublie les interfaces du DOM W3C et passe
plutôt par les classiques du genre : DOM4J ou JDOM ...
A+
TM
Bonjour,
Je cherche désespéremment une façon SIMPLE de parser, mais surtout
créer un fichier HTML dans une structure reprenant les interfaces
"org.w3c.dom.html". Je ne trouve même pas d'implémentations de ces
interfaces ; je ne vais quand même pas les développer moi-même, si ?
Ou alors il y a une astuce...
J'ai pensé à regarder du côté de JAXP, mais ne suis pas sûr de
comprendre comment récupérer des objets implémentant spécifiquement
les interfaces en question.
Merci de vos infos, bonne continuation, Thomas.
Bjour,
En premier, pour rappel HTML n'est pas du XML, donc utiliser JAXP (un
parseur XML "classique") risque d'avoir beaucoup de difficulité ...
Va voir :
http://java-source.net/open-source/html-parsers
1er resultat sous Google avec "HTML java parser" ;-)
Ya un bail, j'avait utilisé JTidy dans un projet et j'en étais trés
satisfait, mais depuis il y a foule, à toi d'utiliser celui que tu
préfère.
Dans tous les cas, si tu veux manipuler facilement le DOM (via XPATH ou
des appels simples en Java), oublie les interfaces du DOM W3C et passe
plutôt par les classiques du genre : DOM4J ou JDOM ...
A+
TMBonjour,
Je cherche désespéremment une façon SIMPLE de parser, mais surtout
créer un fichier HTML dans une structure reprenant les interfaces
"org.w3c.dom.html". Je ne trouve même pas d'implémentations de ces
interfaces ; je ne vais quand même pas les développer moi-même, si ?
Ou alors il y a une astuce...
J'ai pensé à regarder du côté de JAXP, mais ne suis pas sûr de
comprendre comment récupérer des objets implémentant spécifiquement
les interfaces en question.
Merci de vos infos, bonne continuation, Thomas.
Bonjour,
Ton besoin ressemble beaucoup au mien (voir le poste "Parser DOM avec
Xerces2"). J'ai trouvé quelques réponses.
Tu pourras trouver une implémentation des interfaces DOM HTML dans la
distribution Xerces (package org.apache.html.dom)
Il faut ensuite associer cette implémentation au parser.
C'était la question principale de mon poste précédant.
La solution que j'ai trouvé est de faire un
setParameter("http://apache.org/xml/properties/dom/document-class-name",...)
sur l'objet DOMConfiguration du parser avec en second argument le nom de
la classe d'implémentaion du Document.
Ca donne ça :
DOMImplementationRegistry registry =
DOMImplementationRegistry.newInstance();
DOMImplementation domImpl =
(DOMImplementation)registry.getDOMImplementation("Core 3.0 +LS");
DOMImplementationLS domImplLS =
(DOMImplementationLS)domImpl.getFeature("LS","3.0");
LSParser parser =
domImplLS.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
DOMConfiguration domComfig = parser.getDomConfig();
domComfig.setParameter("http://apache.org/xml/properties/dom/document-class-name",HTMLDocumentImpl.class.getName());
HTMLDocument document = (HTMLDocument)parser.parseURI("C:test.html");
HTMLElement body = document.getBody();
...
On peut donc utiliser l'interface DOM spécifique HTML.
Par contre, je ne comprends pas pourquoi Xerces ne passe pas directement
l'instance de la DOMImplementation au parser pour qu'il puisse faire appel
à la fabrique (createDocument(), ....) plutot que de faire de la Reflexion
de classe.
Xavier
Bonjour,
Ton besoin ressemble beaucoup au mien (voir le poste "Parser DOM avec
Xerces2"). J'ai trouvé quelques réponses.
Tu pourras trouver une implémentation des interfaces DOM HTML dans la
distribution Xerces (package org.apache.html.dom)
Il faut ensuite associer cette implémentation au parser.
C'était la question principale de mon poste précédant.
La solution que j'ai trouvé est de faire un
setParameter("http://apache.org/xml/properties/dom/document-class-name",...)
sur l'objet DOMConfiguration du parser avec en second argument le nom de
la classe d'implémentaion du Document.
Ca donne ça :
DOMImplementationRegistry registry =
DOMImplementationRegistry.newInstance();
DOMImplementation domImpl =
(DOMImplementation)registry.getDOMImplementation("Core 3.0 +LS");
DOMImplementationLS domImplLS =
(DOMImplementationLS)domImpl.getFeature("LS","3.0");
LSParser parser =
domImplLS.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
DOMConfiguration domComfig = parser.getDomConfig();
domComfig.setParameter("http://apache.org/xml/properties/dom/document-class-name",HTMLDocumentImpl.class.getName());
HTMLDocument document = (HTMLDocument)parser.parseURI("C:\test.html");
HTMLElement body = document.getBody();
...
On peut donc utiliser l'interface DOM spécifique HTML.
Par contre, je ne comprends pas pourquoi Xerces ne passe pas directement
l'instance de la DOMImplementation au parser pour qu'il puisse faire appel
à la fabrique (createDocument(), ....) plutot que de faire de la Reflexion
de classe.
Xavier
Bonjour,
Ton besoin ressemble beaucoup au mien (voir le poste "Parser DOM avec
Xerces2"). J'ai trouvé quelques réponses.
Tu pourras trouver une implémentation des interfaces DOM HTML dans la
distribution Xerces (package org.apache.html.dom)
Il faut ensuite associer cette implémentation au parser.
C'était la question principale de mon poste précédant.
La solution que j'ai trouvé est de faire un
setParameter("http://apache.org/xml/properties/dom/document-class-name",...)
sur l'objet DOMConfiguration du parser avec en second argument le nom de
la classe d'implémentaion du Document.
Ca donne ça :
DOMImplementationRegistry registry =
DOMImplementationRegistry.newInstance();
DOMImplementation domImpl =
(DOMImplementation)registry.getDOMImplementation("Core 3.0 +LS");
DOMImplementationLS domImplLS =
(DOMImplementationLS)domImpl.getFeature("LS","3.0");
LSParser parser =
domImplLS.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
DOMConfiguration domComfig = parser.getDomConfig();
domComfig.setParameter("http://apache.org/xml/properties/dom/document-class-name",HTMLDocumentImpl.class.getName());
HTMLDocument document = (HTMLDocument)parser.parseURI("C:test.html");
HTMLElement body = document.getBody();
...
On peut donc utiliser l'interface DOM spécifique HTML.
Par contre, je ne comprends pas pourquoi Xerces ne passe pas directement
l'instance de la DOMImplementation au parser pour qu'il puisse faire appel
à la fabrique (createDocument(), ....) plutot que de faire de la Reflexion
de classe.
Xavier
Mais, du coup, quels objets récupère-t-on ?
Le parser renvoie (par le parseURI dans l'exemple) un objet conforme à
Dans un premier temps, je
voudrais plutôt créer la structure HTML (j'utilise bien JDOM) pour ça, mais
avec des objets standardisés : d'où le W3C.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mais, du coup, quels objets récupère-t-on ?
Le parser renvoie (par le parseURI dans l'exemple) un objet conforme à
Dans un premier temps, je
voudrais plutôt créer la structure HTML (j'utilise bien JDOM) pour ça, mais
avec des objets standardisés : d'où le W3C.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mais, du coup, quels objets récupère-t-on ?
Le parser renvoie (par le parseURI dans l'exemple) un objet conforme à
Dans un premier temps, je
voudrais plutôt créer la structure HTML (j'utilise bien JDOM) pour ça, mais
avec des objets standardisés : d'où le W3C.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mais, du coup, quels objets récupère-t-on ?
Le parser renvoie (par le parseURI dans l'exemple) un objet conforme à
l'interface 'Document' du W3C. Donc on peut naviger dans l'arbre DOM avec
les méthodes standards.
Mais comme on a précisé la classe d'implémentation par le parametre
document-class-name, l'instance de notre Document est de type
'HTMLDocumentImpl'. C'est pour cela que le Document peut être casté en
HTMLDocument.
Par la suite, on pourra naviguer dans l'arbre DOM avec, en plus, des
méthodes spécifiques HTML (comme getBody()).Dans un premier temps, je voudrais plutôt créer la structure HTML
(j'utilise bien JDOM) pour ça, mais avec des objets standardisés : d'où
le W3C.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Tout à fait d'accord, voir PS.
Je ne suis pas sûr d'avoir bien compris ce que tu entends par "créer la
structure HTML", mais si c'est "écrire" un document HTML avec les méthodes
DOM, ça donne ça :
DOMImplementation impl = DOMImplementationImpl.getDOMImplementation();
Document doc = impl.createDocument(null,null,null);
Element html = doc.createElement("html");
doc.appendChild(html);
Element body = doc.createElement("body");
html.appendChild(body);
body.setAttribute("bgcolor","Red");
Là, on est 100% DOM. Mais c'est un peu lourd !!!
Autant utiliser les interfaces DOM spécialisées :
HTMLDOMImplementation impl > HTMLDOMImplementationImpl.getHTMLDOMImplementation();
HTMLDocument doc = impl.createHTMLDocument("Titre");
HTMLBodyElement body = (HTMLBodyElement)doc.createElement("body");
doc.setBody(body);
body.setBgColor("Red");
body.setTextContent("Test");
C'est mieux !!!
Il ne reste plus qu'à sérialiser le document créé :
DOMImplementationLS domImplLS > (DOMImplementationLS)impl.getFeature("LS","3.0");
LSSerializer serializer = domImplLS.createLSSerializer();
LSOutput output = domImplLS.createLSOutput();
output.setByteStream(System.out);
serializer.write(doc,output);
<?xml version="1.0" encoding="UTF-8"?>
<HTML><HEAD><TITLE>Titre</TITLE></HEAD><BODY
bgcolor="Red">Test</BODY></HTML>
Voilà.
P.S:
Beaucoup de personnes diront que le DOM est un peu lourd.
C'est vrai qu'on peut faire plus consis avec des outils propriétaires.
Mais bon, le W3C spécifie des technologies indépendantes de la plateforme
et du langage. Ca a ses inconvegnants.
Mais ce sera tout de même formidable lorsqu'on pourra modéliser un système
sans se soucier du langage, de la plateforme, et des frameworks... (voir
travaux de l'OMG).
Bon courage !!!
Mais, du coup, quels objets récupère-t-on ?
Le parser renvoie (par le parseURI dans l'exemple) un objet conforme à
l'interface 'Document' du W3C. Donc on peut naviger dans l'arbre DOM avec
les méthodes standards.
Mais comme on a précisé la classe d'implémentation par le parametre
document-class-name, l'instance de notre Document est de type
'HTMLDocumentImpl'. C'est pour cela que le Document peut être casté en
HTMLDocument.
Par la suite, on pourra naviguer dans l'arbre DOM avec, en plus, des
méthodes spécifiques HTML (comme getBody()).
Dans un premier temps, je voudrais plutôt créer la structure HTML
(j'utilise bien JDOM) pour ça, mais avec des objets standardisés : d'où
le W3C.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Tout à fait d'accord, voir PS.
Je ne suis pas sûr d'avoir bien compris ce que tu entends par "créer la
structure HTML", mais si c'est "écrire" un document HTML avec les méthodes
DOM, ça donne ça :
DOMImplementation impl = DOMImplementationImpl.getDOMImplementation();
Document doc = impl.createDocument(null,null,null);
Element html = doc.createElement("html");
doc.appendChild(html);
Element body = doc.createElement("body");
html.appendChild(body);
body.setAttribute("bgcolor","Red");
Là, on est 100% DOM. Mais c'est un peu lourd !!!
Autant utiliser les interfaces DOM spécialisées :
HTMLDOMImplementation impl > HTMLDOMImplementationImpl.getHTMLDOMImplementation();
HTMLDocument doc = impl.createHTMLDocument("Titre");
HTMLBodyElement body = (HTMLBodyElement)doc.createElement("body");
doc.setBody(body);
body.setBgColor("Red");
body.setTextContent("Test");
C'est mieux !!!
Il ne reste plus qu'à sérialiser le document créé :
DOMImplementationLS domImplLS > (DOMImplementationLS)impl.getFeature("LS","3.0");
LSSerializer serializer = domImplLS.createLSSerializer();
LSOutput output = domImplLS.createLSOutput();
output.setByteStream(System.out);
serializer.write(doc,output);
<?xml version="1.0" encoding="UTF-8"?>
<HTML><HEAD><TITLE>Titre</TITLE></HEAD><BODY
bgcolor="Red">Test</BODY></HTML>
Voilà.
P.S:
Beaucoup de personnes diront que le DOM est un peu lourd.
C'est vrai qu'on peut faire plus consis avec des outils propriétaires.
Mais bon, le W3C spécifie des technologies indépendantes de la plateforme
et du langage. Ca a ses inconvegnants.
Mais ce sera tout de même formidable lorsqu'on pourra modéliser un système
sans se soucier du langage, de la plateforme, et des frameworks... (voir
travaux de l'OMG).
Bon courage !!!
Mais, du coup, quels objets récupère-t-on ?
Le parser renvoie (par le parseURI dans l'exemple) un objet conforme à
l'interface 'Document' du W3C. Donc on peut naviger dans l'arbre DOM avec
les méthodes standards.
Mais comme on a précisé la classe d'implémentation par le parametre
document-class-name, l'instance de notre Document est de type
'HTMLDocumentImpl'. C'est pour cela que le Document peut être casté en
HTMLDocument.
Par la suite, on pourra naviguer dans l'arbre DOM avec, en plus, des
méthodes spécifiques HTML (comme getBody()).Dans un premier temps, je voudrais plutôt créer la structure HTML
(j'utilise bien JDOM) pour ça, mais avec des objets standardisés : d'où
le W3C.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Tout à fait d'accord, voir PS.
Je ne suis pas sûr d'avoir bien compris ce que tu entends par "créer la
structure HTML", mais si c'est "écrire" un document HTML avec les méthodes
DOM, ça donne ça :
DOMImplementation impl = DOMImplementationImpl.getDOMImplementation();
Document doc = impl.createDocument(null,null,null);
Element html = doc.createElement("html");
doc.appendChild(html);
Element body = doc.createElement("body");
html.appendChild(body);
body.setAttribute("bgcolor","Red");
Là, on est 100% DOM. Mais c'est un peu lourd !!!
Autant utiliser les interfaces DOM spécialisées :
HTMLDOMImplementation impl > HTMLDOMImplementationImpl.getHTMLDOMImplementation();
HTMLDocument doc = impl.createHTMLDocument("Titre");
HTMLBodyElement body = (HTMLBodyElement)doc.createElement("body");
doc.setBody(body);
body.setBgColor("Red");
body.setTextContent("Test");
C'est mieux !!!
Il ne reste plus qu'à sérialiser le document créé :
DOMImplementationLS domImplLS > (DOMImplementationLS)impl.getFeature("LS","3.0");
LSSerializer serializer = domImplLS.createLSSerializer();
LSOutput output = domImplLS.createLSOutput();
output.setByteStream(System.out);
serializer.write(doc,output);
<?xml version="1.0" encoding="UTF-8"?>
<HTML><HEAD><TITLE>Titre</TITLE></HEAD><BODY
bgcolor="Red">Test</BODY></HTML>
Voilà.
P.S:
Beaucoup de personnes diront que le DOM est un peu lourd.
C'est vrai qu'on peut faire plus consis avec des outils propriétaires.
Mais bon, le W3C spécifie des technologies indépendantes de la plateforme
et du langage. Ca a ses inconvegnants.
Mais ce sera tout de même formidable lorsqu'on pourra modéliser un système
sans se soucier du langage, de la plateforme, et des frameworks... (voir
travaux de l'OMG).
Bon courage !!!