2014-12-22 10 views
5

Ho deciso di implementare l'Abstract List<Node>. ecco un pezzo di esso:Implementazione della lista <Node>

import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

    public class myNodeList implements NodeList{ 


    Node root = null; 
    int length = 0; 

    public myNodeList() {} 
    public void addNode(Node node) { 
     if(root == null) 
     { 
      root = node; 
       } 
      else   
     root.appendChild(node); 
     length++; 
     System.out.println("this is the added node " +node); 
    }  
    } 

ma quando provo a add un nodo, mi dà la seguente eccezione:

Exception in thread "main" org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. 
at com.sun.org.apache.xerces.internal.dom.NodeImpl.insertBefore(NodeImpl.java:478) 
at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235) 
at pageparsertest.myNodeList.addNode(myNodeList.java:27) 

è questo a causa della Node root = null; che fa per aggiungere un nodo a un nodo null? quindi come può essere risolto

risposta

0

bene questo è embarressing ma ho cambiato la mia idea di attuare tale e invece utilizzato static List<Node> listOfNodes = new ArrayList<Node>(); che ha funzionato bene per me!

1

Non è possibile aggiungere a un, è necessario utilizzare com.sun.org.apache.xerces.internal.dom.ParentNode.

appendChild chiamerà insertBefore che getta solo Exception per NodeImpl

Source code

spostare uno o più nodi (s) alla nostra lista di bambini. Si noti che questo rimuove implicitamente dal padre precedente.

Per impostazione predefinita non accettiamo alcun figlio, ParentNode sovrascrive questo.

Date un'occhiata come Axis implementato loro: http://grepcode.com/file/repo1.maven.org/maven2/com.ning/metrics.collector/1.0.2/org/apache/axis/message/NodeListImpl.java

Sembra che si sta cercando di costruire un albero nodo utilizzando il primo nodo come la radice, non un elenco dei nodi. Quale non è possibile, i tuoi nodi sono NodeImpl non ParentNode.

Se si desidera un albero, è necessario creare (o importare) in qualche modo un nodo genitore. Se hai solo bisogno di un elenco, usa un List.


Potrebbe essere necessario creare un genitore personalizzato falso per inserire i nodi. Date un'occhiata qui: HIERARCHY_REQUEST_ERR while trying to add elements to xml file in a for loop

+0

ma sembra che stia usando ** org.w3c.dom.Node ** – lonesome

+0

Non so come farlo. quello che voglio dire è che non riesco a scoprire come usare ** com.sun.org.apache.xerces.internal.dom.ParentNode ** e dal momento che nell'ex dei miei programmi ho usato ** org.w3c.dome.Node * * è come farmi usare il casting e poi quando eseguo il programma, nega per consentire il casting e altro. – seventeen

+0

Ho appena analizzato il codice HTML di una pagina, quindi uso la libreria "" tagoup ** per creare il DOM dall'HTML. quindi scegliendo alcuni nodi da quel DOM che vogliono inserirli in un elenco per uso futuro, ma questo problema appare. – seventeen