# JTree Struktur aus XML (mit Attributen)



## alex-t (4. Aug 2004)

suche eine lösung um xml (von einer url z.b. http://localhost/testxml.php)
 mit ähnlicher ausgabe:

############################################

```
<?xml version="1.0"?> 
<struktur> 

   <status>ok</status>

   <knoten> 
      <name>home</name> 
      <wert>1</wert> 
      <gesperrt>nein</gesperrt> 

            <knoten> 
              <name>einstellugen</name> 
              <wert>5</wert> 
              <gesperrt>ja</gesperrt> 
            </knoten>

            <knoten> 
               <name>person</name> 
               <wert>45</wert> 
               <gesperrt>ja</gesperrt> 

                    <knoten> 
                        <name>anschrift</name> 
                        <wert>88</wert> 
                        <gesperrt>ja</gesperrt> 
                    </knoten>

            </knoten>

   </knoten>

   <knoten> 
      <name>bereiche</name> 
      <wert>2</wert> 
      <gesperrt>nein</gesperrt> 
   </knoten>

   <knoten> 
      <name>hilfe</name> 
      <wert>3</wert> 
      <gesperrt>nein</gesperrt> 
   </knoten> 

</sturktur>
```
############################################

in ein JTree laden zu können.
diese soll dann so aussehen:

```
[-]home
    [ ]einstellungen
    [-]person
        [ ]anschrift
[ ]bereiche
[ ]hilfe
```

ich habe mir die konstrutoren von JTree mal angeschaut. da gibt es eine möglichkeit bei der initialisierung gleich ein HashTable zu übergeben. das würde evt. die ausgabe ermöglichen.

nun brauche ich aber hinter dem JTree auch noch eine datenstruktur, über die ich bei einem klick, oder einen doppelklick (der code hierzu habe ich in den javadocs auf java.sun.com bereits gefunden) die values von <wert> und <gesperrt> zur weiterverarbeitung erhalte. da stehe ich momentan auf dem schlauch. gibt es da eine verbindung von dom oder sax zu JTree, oder muss ich die grafische ausgabe parallel zu der datenstrucktur führen?
und wie lässt sich das realisieren? gibt es evt. irgendwo bereits ein beispiel?

und wie frage ich überhaupt die elemente aus dem xml ab? es geht dabei besonders um die zeile mit <status> falls dieser wert nämlich nicht 'ok' ist, sondern vielleicht 'dberror', gibt es natürlich keine ausgabe, sondern eher eine warnmeldung.[/code]


(edit: code tags)


----------



## alex-t (4. Aug 2004)

folgendes habe ich bei meiner recherche gefunden, allerdings kann ich das nicht vollkommen nachvollziehen.
ich habe ein problem mit dem parser, da ich den nicht kenne. ist das sax, oder etwas anderes?

und an der markierten stelle fehlt mir logisch der code, wo sich jtree und xml treffen   - kann mir jemand diesen schritt hier erklären? 


```
public class XmlTreeViewerSax extends JFrame {


    // Default parser to use
    private String vendorParserClass =
        "org.apache.xerces.parsers.SAXParser";

    // The base tree to render
    private JTree jTree;

    // Tree Model to use
    DefaultTreeModel defaultTreeModel;

    public XmlTreeViewerSax() {
        // Handle Swing setup
        super("SAX Tree Viewer");
        setSize(600, 450);
    }


    public void init(String xmlURI)
        throws IOException, SAXException {

        DefaultMutableTreeNode base = new DefaultMutableTreeNode(
                                            "XML Document: " + xmlURI);

        // Build Tree Model
        defaultTreeModel = new DefaultTreeModel(base);
        jTree = new JTree(defaultTreeModel);

        // Construct the tree hierarchy
        buildTree(defaultTreeModel, base, xmlURI);

        // Display the results
        getContentPane().add(new JScrollPane(jTree), BorderLayout.CENTER);

    }


    public void buildTree(    DefaultTreeModel treeModel, DefaultMutableTreeNode base, String xmlURI) 
                            throws IOException, SAXException {

        // Create instances needed for parsing
        XMLReader reader = XMLReaderFactory.createXMLReader(vendorParserClass);

        // Register content handler

        // Register error handler

        // Parse
        InputSource inputSource = new InputSource(xmlURI);
        reader.parse(inputSource);

    }  // <<<<<<<<<<<<<<<  <<<<<<<<<<<  <<<<<<<<<<<<<< habe ich da etwas übersehen???

    
    /**
     * Sole entry point to the class and application.
     * @param args Array of String arguments.
     */
    public static void main(String[] args) {

        if (args.length != 1) {
            System.err.println(
                "Usage: java XmlTreeViewerSax " +
                "[XML Document URI]"
            );
            System.exit(1);
        }

        String documentURI = args[0];

        try {
            XmlTreeViewerSax viewer = new XmlTreeViewerSax();
            viewer.init(documentURI);
            viewer.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
```


----------



## yidaki (10. Aug 2004)

:shock: 

das sollte dir hoffentlich weiterhelfen..

gruß


----------



## alex-t (10. Aug 2004)

Hatte nun einen Tag keine Zeit für Java. Aber nein, ich werde immer noch nicht sonderlich schlau aus dem Code.


----------



## Guest (12. Aug 2004)

das kommt davon... ich hab nicht bemerkt das ich den link wohl vergessen hatte einzufügen... kleinen moment mal ich hatte auf jeden fall einige programme .... gib mal in  google xml2jtree oder ähnlich ein, dann solltest du eigentlich fündig werden.

http://java.sun.com/xml/jaxp/dist/1.0.1/docs/tutorial/dom/4_tree.html


habs doch noch gefunden...


----------



## alex-t (2. Sep 2004)

Ich habe immer noch keine zufriedenstellende Lösung dafür gefunden. 
Wünschte das ganze wäre so einfach wie in manch anderen Sprachen. Naja, die suche geht weiter.


----------



## foobar (2. Sep 2004)

Vielleicht hilft dir das weiter http://www.java-forum.org/de/viewtopic.php?t=7997


----------



## alex-t (2. Sep 2004)

Diesen Post habe ich nocht nicht gesehen. Ist ja auch nicht so alt gewesen. 
Aber es scheint mir etwas übertrieben zu sein JDom dafür zu verwenden. Meint ihr nicht?


----------



## Roar (2. Sep 2004)

wieso? ich benutze immer JDom für XML Verarbeitung und finde es sehr angenehm, und hatte zudem noch nie probleme damit. kann ich nur empfehlen 

PS.: vielleicht interessiert es dich ja, eigentlich bin ich durch deinen Post auf die Idee gekommen


----------



## alex-t (6. Sep 2004)

Roar hat gesagt.:
			
		

> wieso? ich benutze immer JDom für XML Verarbeitung und finde es sehr angenehm, und hatte zudem noch nie probleme damit. kann ich nur empfehlen
> 
> PS.: vielleicht interessiert es dich ja, eigentlich bin ich durch deinen Post auf die Idee gekommen



Kannst du mir zeigen, was du mit JDom realisiert hast?
Und wie gross ist eigentlich das, was man mit einem Programm im Jar distributieren würde, ich meine jetzt die JDom "lib"?


----------



## Roar (6. Sep 2004)

naja keine allzugroßen XML Files, meistens nur config files wo die einstellungen des users drin gespeichert werden, und auch meine Update funktion in meinem dashboard hilft sich mit XML. Besonders schwer ist das nicht. Schau einfach mal in die JDom API, da findet sich alles.

die jdom.jar die man benötigt ist nur 144 KB groß...


----------



## alex-t (9. Sep 2004)

Roar hat gesagt.:
			
		

> naja keine allzugroßen XML Files, meistens nur config files wo die einstellungen des users drin gespeichert werden, und auch meine Update funktion in meinem dashboard hilft sich mit XML. Besonders schwer ist das nicht. Schau einfach mal in die JDom API, da findet sich alles.
> 
> die jdom.jar die man benötigt ist nur 144 KB groß...



Hallo Roar

Damit habe ich leider ein Problem. Meine Anwendung soll möglichst klein sein. Momentan 180 KB. Erwartet werden zum Schluß ca. 400 KB sein. 144 KB im plus wären mir da zu viel.

Vielleicht ist diese Entscheidung für manche nicht nachvollziehbar, aber das ist für mein Projekt wirklich wichtig. Weiter benötige ich doch eigentlich nur das Laden von XML und daraus ein JTree parsen. Ich habe mir soeben einen halb-gründlichen Überblick verschafft. Und meiner Meinung nach sieht es so aus, als ob ich eine Mücke mit einem Vorschlaghammer erledigen würde, wenn ich JDom einsetzen würde. Aber bitte nicht falsch verstehen, JDom sieht klasse aus!

Mit freundlichen Grüßen

Alex Tugarev

PS: Hat denn niemand einen XML-JTree mit den Mitteln, die z.B. Java 1.4/1.5 mitbringen, erstellt? Bitte um Infos, Links, etc.


----------



## rogi789 (25. Sep 2004)

http://www.devx.com/getHelpOn/10MinuteSolution/16694/0/page/1

kennst du das schon?


----------

