IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

NPE sur #importNode Document jTidy [DOM]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut NPE sur #importNode Document jTidy
    Bonjour à tous,

    J'utilise jTidy pour récupérer des fichiers HTML en XHTML et ensuite incorporer le contenu du body dans mes propres balises org.w3c.dom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Tidy converter = new Tidy();
    converter.setQuiet(true);
    converter.setXmlOut(true);
    //converter.setXHTML(true);
    converter.setEncloseText(true);
    Document doc = converter.parseDOM(new FileInputStream(file), null);
     
    // nettoyer enveloppe HTML (la fabrique inclue elle-même HTML/HEAD+BODY)
    NodeList body = doc.getElementsByTagName("body");
    NodeList bodyContents = ((Element) body.item(0)).getChildNodes();
    ...
    Element bodyNode = xmlDoc.createElement("body");
    for (int i = 0; i < bodyContents.getLength(); i++) {
    	bodyNode.appendChild(xmlDoc.importNode(bodyContents.item(i), true));
    }
    Et voici le résultat :
    org.w3c.dom.DOMException: DOM method not supported
    at org.w3c.tidy.DOMDocumentImpl.getImplementation(DOMDocumentImpl.java:129)
    at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1536)
    at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.importNode(CoreDocumentImpl.java:1498)
    ...
    J'ai cru comprendre, subliminalement, que d'affecter un certain handler pourrait aider... mais lequel, et où ? Mystère !

    Le source jTidy :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /**
     * @todo DOM level 2 getImplementation() Not implemented. Throws NOT_SUPPORTED_ERR.
     * @see org.w3c.dom.Document#getImplementation
     */
    public org.w3c.dom.DOMImplementation getImplementation()
    {
        throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "DOM method not supported");
    }


    Si quelqu'un a une idée, je suis volontiers preneur !
    Merci d'avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Architecte senior Java EE/Spring - ScrumMaster
    Inscrit en
    Juin 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte senior Java EE/Spring - ScrumMaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 229
    Par défaut FIXED
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    bodyNode.appendChild(this.importNode(bodyContent));
    ...
    private Node importNode(Node node) {
    	Element newNode = xmlDoc.createElement(node.getNodeName());
     
    	NamedNodeMap attrs = node.getAttributes();
    	for (int i = 0; i < attrs.getLength(); i++) {
    		Node attr = attrs.item(i);
    		Attr newAttr = xmlDoc.createAttribute(attr.getNodeName());
    		newAttr.setNodeValue(attr.getNodeValue());
    		newNode.setAttributeNode(newAttr);
    	}
     
    	NodeList nodes = node.getChildNodes();
    	for (int i = 0; i < nodes.getLength(); i++) {
    		Node child = nodes.item(i);
    		switch (child.getNodeType()) {
    		case Node.ELEMENT_NODE:
    			newNode.appendChild(this.importNode(child));
    			break;
    		case Node.TEXT_NODE:
    			newNode.setTextContent(child.getNodeValue());
    			break;
    		}
    	}
    	return newNode;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/04/2007, 14h38
  2. lancer une application par click sur son document
    Par philippe V dans le forum Visual C++
    Réponses: 3
    Dernier message: 14/12/2006, 17h12
  3. [C#][Add-in Word] Focus sur un document precis
    Par Bobarctor dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/04/2006, 07h31
  4. Lien sur des documents
    Par bidson dans le forum XMLRAD
    Réponses: 1
    Dernier message: 08/02/2006, 13h36
  5. [XSLT]select sur plusieur documents XML
    Par jesus144 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/06/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo