Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    11

    [JDOM] inserimento di un nodo all'interno di un albero

    Ciao a tutti,
    scrivo per chiedere aiuto a chi ha qualche esperienza con la libreria JDOM.

    Il mio problema è il seguente:

    nella mia applicazione carico un file xml gia esistente, e creo il corrispondente oggetto Document.

    Successivamente devo trovare i tag di testo, per fare questo scorro l'albero xml con una funzione ricorsiva .

    Una volta trovato il tag di testo devo ricavare il nodo "parent" e a questo aggiungere altri tag ("fratelli" di text).

    Il problema è che se aggiungo il nodo durante l'iterazione incorro in una

    java.util.ConcurrentModificationException

    ...vorrei cercare quindi di memorizzare da qualche parte un identificatore di nodo per ogni tag di testo e una volta terminata l'analisi di tutto il file accedere direttamente al nodo "padre" che mi interessa attraverso gli identificatori.

    Purtroppo non ho trovato nessuna funzione in jdom che mi permette di ricavare una chiave o un identificatore univoco per i nodi....esiste???

    Ho anche provato a settare un attributo "id" al tag di testo, ma poi, non ho nessun metodo che mi restituisca direttamente il nodo con attributo id =x....

    insomma, io non ho più idee....

    qualcuno può darmi un consiglio???

    come si fa ad aggiungere un nodo all'albero xml con jDOM??????

    spero di essere stata abbastanza chiara...

    grazie a tutti i anticipo!!!!

    ciao

    ps: il file xml chedevo modificare è il file xml di word!!!
    pps: posto il codice che mi da la ModificationCOncurrentException:

    codice:
    public void load() {
    		
    		System.out.println("prova!!!!!!!!!");
    		
    		SAXBuilder builder = new SAXBuilder();
    		String path = "C:\\prova.xml";
    		
    		System.out.println("url file "+ path);
    		
    		try {	
    		      Document doc = builder.build(path);  
    		      
    		      Element root = doc.getRootElement();
    		      
    		      Iterator i = root.getDescendants(new ElementFilter("t"));
    		      
    		      System.out.println("-----con la remove prova2---------");
    		      
    		      Element rPr = new Element("rPr");
    		      rPr.setAttribute("attr", "ciao");
    		      
    		      List lista = new ArrayList();
    		      
    		      while(i.hasNext()){
    		    	  
    		    	Element el = (Element)i.next();
    		    	Element parent = el.getParentElement();
    		    	i.remove();
    		    	root.addContent(rPr);
    		    	
    		      }
    		      
    		      System.out.println("--------------");
    		      
    		}
    		    catch (JDOMException e) { 
    		      System.out.println(path + " non è un URL corretto");
    		      System.out.println(e.getMessage());
    		    }  
    		    catch (IOException e) { 
    		      System.out.println("Could not check " + path);
    		      System.out.println(" because " + e.getMessage());
    		    } 
    		    
    	}

  2. #2
    Scusa kerikay,
    io non ho capito questa parte del tuo post

    Successivamente devo trovare i tag di testo, per fare questo scorro l'albero xml con una funzione ricorsiva
    Di quale tag di testo parli?
    Non tocco jdom da un annetto, ma non ricordo che era difficile aggiungere un nodo.
    Puoi farmi capire meglio?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    11
    Allora il file xml che devo manipolare è l'xml generato da Word 2007.
    Sono presenti centinaia di tag...
    io devo trovare i tag <w:t>
    (e fino a qui nessun problema!)
    questi tag li ricavo chiamando tutti i discendenti della root e mettendo un filtro....
    codice:
    Element root = doc.getRootElement();
    Iterator i = root.getDescendants(new ElementFilter("t"));
    dopodichè scorro l'iteratore che mi ha ritornato la getDescendants
    e a questo punto viene lanciata l'eccezione!!!
    quel pezzo di struttura xml è fatto in questo modo:

    <w:r>
    <w:t>testo</w:t>
    </w:r>
    prima di r ci sono molti altri parent e fratelli....
    e non sono nemmeno sicura che r sia sempre parent di t....
    io devo aggiungere un nodo....che sia fratello di t!!

    Non so se ora sono stata + chiara.......

  4. #4
    Ti rispondo io anche se non sono sicuro perchè vedo che nessuno risponde.
    Comuque penso che il problema sia proprio quel metodo getDescendants. Io non l'ho mai usato.
    Se non sbaglio c'era un metodo tipo getTagByName in cui tu passi il tag che ti serve poi ti prendi il parent e aggiungi li l'elemento che desideri.

    ...

    Di meglio non saprei dirti

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    11
    purtroppo non trovo il metodo che mi hai consigliato nella libreria di JDom....

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Java viene trattato nel sub-forum apposito ben evidenziato all'inizio del forum.
    Inoltre, fra parentesi quadre si specifica il linguaggio... JDom è una libreria, ma il linguaggio è Java.


    Correggo e sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    11
    ooppps.....sorry!
    mi sembrava di aver postato nel posto giusto....evidentemente non era così.....
    per la parentesi quadre....non sapevo....la prossima volta farò + attenzione!!!
    Grazie


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.