Avatar billede digitalsoul Nybegynder
12. december 2004 - 16:59 Der er 12 kommentarer og
1 løsning

tilføjelse til xml JDOM

jeg har siddet og kigget lidt på arne_vs XML artikler, men har lidt problemer med at få tingene til at virke.

"Mere XML i Java" og Ændring af JDOM træ.

Jeg har direkte kopieret det eksemepl over, så det burde jo virke.
Men jeg får en fejl når jeg prøver:

ChangeJDOM.java

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method hasChildren() is undefined for the type Element
    The method setIndent(boolean) is undefined for the type XMLOutputter
    The method setNewlines(boolean) is undefined for the type XMLOutputter

    at Xmltest.main(Xmltest.java:26)

Hvad er der lige galt? Det er jo direkte c/p
Avatar billede digitalsoul Nybegynder
12. december 2004 - 16:59 #1
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.adapters.DOMAdapter;
import org.jdom.adapters.XercesDOMAdapter;
import org.jdom.input.DOMBuilder;
import org.jdom.output.XMLOutputter;

public class ChangeJDOM {
    public static void main(String[] args) {
        try {
            // læs fra fil til DOM træ
            DOMAdapter da = new XercesDOMAdapter();
            org.w3c.dom.Document w3cdoc = da.getDocument(new FileInputStream("C:\\test.xml"), false);
            DOMBuilder b = new DOMBuilder();
            Document doc = b.build(w3cdoc);
            // fjern tomme medlemmer
            List list = doc.getRootElement().getChildren();
            for (int i = 0; i < list.size(); i++) {
              Element elm = (Element) list.get(i);
              if(!elm.hasChildren()) {
                    elm.getParent().removeContent(elm);           
              }
            }
            // tilføj nyt medlem
            Element navn = new Element("navn");
            navn.setText("Lars Larsen");
            Element adresse = new Element("adresse");
            adresse.setText("Ledvej 14");
            Element medlem = new Element("medlem");
            medlem.addContent(navn);
            medlem.addContent(adresse);
            medlem.setAttribute("no", "4");
            doc.getRootElement().addContent(medlem);
            // udskriv DOM træ
            XMLOutputter fmt = new XMLOutputter();
            fmt.setIndent(true);
            fmt.setNewlines(true);
            System.out.println(fmt.outputString(doc));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
12. december 2004 - 17:09 #2
Den bygger hos mig.

Jeg har JDOM-B8 liggende, hvad version bruger du ?
Avatar billede arne_v Ekspert
12. december 2004 - 17:19 #3
Hov - de har lavet om fra B8 til 1.0 !

Den her version virker i 1.0:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.adapters.DOMAdapter;
import org.jdom.adapters.XercesDOMAdapter;
import org.jdom.input.DOMBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class ChangeJDOM {
    public static void main(String[] args) {
        try {
            // læs fra fil til DOM træ
            DOMAdapter da = new XercesDOMAdapter();
            org.w3c.dom.Document w3cdoc = da.getDocument(new FileInputStream("C:\\test.xml"), false);
            DOMBuilder b = new DOMBuilder();
            Document doc = b.build(w3cdoc);
            // fjern tomme medlemmer
            List list = doc.getRootElement().getChildren();
            for (int i = 0; i < list.size(); i++) {
              Element elm = (Element) list.get(i);
              if(elm.getChildren().size() == 0) {
                    elm.getParent().removeContent(elm);         
              }
            }
            // tilføj nyt medlem
            Element navn = new Element("navn");
            navn.setText("Lars Larsen");
            Element adresse = new Element("adresse");
            adresse.setText("Ledvej 14");
            Element medlem = new Element("medlem");
            medlem.addContent(navn);
            medlem.addContent(adresse);
            medlem.setAttribute("no", "4");
            doc.getRootElement().addContent(medlem);
            // udskriv DOM træ
            XMLOutputter fmt = new XMLOutputter(Format.getPrettyFormat());
            System.out.println(fmt.outputString(doc));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Avatar billede digitalsoul Nybegynder
12. december 2004 - 17:20 #4
Avatar billede digitalsoul Nybegynder
12. december 2004 - 17:22 #5
Jeg fulgte README filen og gjorde set JAVA_HOME=C:\Program Files\Java\jdk1.5.0

og kørte build.bat

Der skete så en masse ting på skærmen, kopirede jdom.jar over i et bibliotek, og tilføjede filen inde i eclipse.
Avatar billede digitalsoul Nybegynder
12. december 2004 - 17:31 #6
Jamen mange tak så :)

Håber du opdatere dine artikler..

Smider du et svar?
Avatar billede digitalsoul Nybegynder
12. december 2004 - 17:40 #7
Sagde jeg da vidst for tideligt

org.jdom.JDOMException: java.lang.ClassNotFoundException: org.apache.xerces.parsers.DOMParser: org.apache.xerces.parsers.DOMParser
    at org.jdom.adapters.XercesDOMAdapter.getDocument(XercesDOMAdapter.java:149)
    at Xmltest.main(Xmltest.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.DOMParser
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.jdom.adapters.XercesDOMAdapter.getDocument(XercesDOMAdapter.java:96)
    ... 1 more
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.DOMParser
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.jdom.adapters.XercesDOMAdapter.getDocument(XercesDOMAdapter.java:96)
    at Xmltest.main(Xmltest.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.DOMParser
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.jdom.adapters.XercesDOMAdapter.getDocument(XercesDOMAdapter.java:96)
    at Xmltest.main(Xmltest.java:20)
Avatar billede digitalsoul Nybegynder
12. december 2004 - 17:40 #8
Den raportere ikke nogen fejl inde i koden nu, nu er det så bare når jeg kører det
Avatar billede arne_v Ekspert
12. december 2004 - 17:40 #9
Jeg skal nok opdatere min artikel
Avatar billede arne_v Ekspert
12. december 2004 - 17:41 #10
Du skal også have Xerces i classpath når du kører programmet.
Avatar billede arne_v Ekspert
12. december 2004 - 17:42 #11
XercesDOMAdapter bruger jo nok et eller anndet Xerces ...
Avatar billede arne_v Ekspert
12. december 2004 - 17:42 #12
svar
Avatar billede arne_v Ekspert
12. december 2004 - 18:25 #13
Så er artiklen opdateret.

Efter min mening er det ikke pænt af dem at fjerne metoder mellem beta 8 og
version 1.0 !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester