Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [JAVA] XML (https://www.delphipraxis.net/87625-%5Bjava%5D-xml.html)

yankee 10. Mär 2007 14:39

Re: [JAVA] XML
 
Zitat:

Zitat von Dunedain
Ich wollte (muss?) das ganze über nen DOM|JDOM regeln, da ich die Daten ja auch wieder einlesen können muss. Und genau da liegt mein Problem.

Zitat:

Zitat von yankee
Zum auslesen kannst du dann SAX (http://www.saxproject.org/) nehmen. Das dürfte die performanteste Lösung sein...

Mit der DOM|JDOM (hab' damit noch nie was gemacht) müsste die von dir generierte xml-Datei aber auch wieder einlesen können.

Dunedain 10. Mär 2007 15:10

Re: [JAVA] XML
 
Zitat:

Zitat von yankee
Mit der DOM|JDOM (hab' damit noch nie was gemacht) müsste die von dir generierte xml-Datei aber auch wieder einlesen können.

Klar, das sollte schon irgendwie gehen... Hab aber auch noch nie mit DOM oder JDOM gearbeitet. Hab mir bloß gedacht, bevor ich das XML Dokument als String betrachte und mir versuche, nen eigenen Parser zu schreiben, nehm ich lieber was vorhandenes...

Aber genau das ist das Problem ;) Ich habe es weder hinbekommen, mit JDOM das angesprochene XML Dokument zu erstellen noch es wieder auszulesen. Ok, das Auslesen funzt schonmal teilweise...

Ich komme zwar mit JDOM (SaxBuilder) an die Werte, aber nicht über die einzelnen Kind Knoten, sondern nur über den Root Node, durch den ich auch auf untergeordnete Knoten welche keine direkten "Kinder" des Root Node sind, zugreifen kann (Also eine Liste, wo jedes XML Element OHNE "Verschachtelung" aufgeführt wird). Das macht es schwieriger, wenn nicht gar unmöglich, die gelesenen Daten wieder in die Liste zu packen...

yankee 10. Mär 2007 15:17

Re: [JAVA] XML
 
php enthält eine Portierung des sax-parsers, mit dem ich schon gearbeited habe...

Und zumindest da ist das ganz einfach... Und unter http://www.saxproject.org/quickstart.html ist auch eine kleine Anleitung.
Wo ist dein Problem damit? Wenn du mir sagst, wo du nicht weiterkommst, kann ich dir vielleicht helfen. Aber du verstehst sicherlich, dass ich keine Motovation habe dir jetzt den kompletten qt zu schrieben ;-).

Dunedain 11. Mär 2007 12:40

Re: [JAVA] XML
 
Zitat:

Zitat von yankee
[...] Aber du verstehst sicherlich, dass ich keine Motovation habe dir jetzt den kompletten qt zu schrieben ;-).

Nicht? Schade :o ;)

Also, der Output über JDOM funktioniert jetzt. Folgende Funktion erzeugt den nachfolgend gezeigten XML Output.
Code:
public Element toElement ()
{
   
    /* Element für sich selbst mit dem eigenen Namen erstellen */
    Element self = new Element ( Key );
   
   
    /* Prüfen, ob das Element selbst ein Container ist */
    if( SubNodes.size () == 0 /*!Type.equalsIgnoreCase ( "container" )*/ )
    {
       
        /* Kein Container --> Datenelement
         * Die relevanten Daten extrahieren
         */
       
        /* Den Datentyp speichern */
        self.setAttribute ( "type", Type );
       
        /* Beschreibung speichern (Nur falls vorhanden) */
        if( !Description.equalsIgnoreCase ( "" ) )
            self.setAttribute ( "description", Description );
       
        /* Den Datenwert speichern */
        self.setText ( Value.toString () );
       
    }
    else
    {
       
        /* Container Element --> Enthaltene Elemente durchlaufen
         */
        for( int i = 0 ; i < SubNodes.size () ; i++ )
        {
           
            /* Kind Elemente hinzufügen */
            self.addContent ( SubNodes.get ( i ).toElement () );
           
        }
    }
   
    /* Erstelltes Element zurückgeben */
    return self;
   
}
XML-Code:
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <ein>
    <anderer>
      <pfad>
        <zu>
          <einem>
            <anderen>
              <wert type="string" description="Ein ziemlich uninteressanter Testwert!">Hallo</wert>
            </anderen>
          </einem>
        </zu>
      </pfad>
    </anderer>
  </ein>
  <window>
    <position>
      <left type="short" description="Was war das doch gleich?">100</left>
    </position>
  </window>
</root>

Jetzt muss ich das natürlich wieder auslesen können.
Code:
public void loadFromFile (
        String FileName )
{
   
    try
    {
        SAXBuilder sax = new SAXBuilder ();
        Document doc = sax.build ( FileName );
       
        loadFromElement( doc.getRootElement (), root );
    }
    catch (IOException ex)
    {
        ex.printStackTrace ();
    }
    catch (JDOMException ex)
    {
        ex.printStackTrace ();
    }
}
private StorageItem loadFromElement (
        Element item,
        StorageItem data )
{
   
    Iterator itr = (item.getChildren ()).iterator ();
    Iterator otr = null;
    while(itr.hasNext ())
    {
       
        Element current = (Element)itr.next ();
        otr = (current.getChildren ()).iterator ();
       
        /* Container? */
        if( otr.hasNext () )
        {
            data.SubNodes.add ( loadFromElement ( (Element)otr.next (), data ) );
        }
        /* Daten */
        else
        {
            try
            {
                data.SubNodes.add ( new StorageItem ( current.getName (),
                        current.getAttribute ( "type" ).getValue (),
                        current.getText (),
                        current.getAttribute ( "description" ).getValue () ) );
            }
            catch (InvalidStorageData ex)
            {
                ex.printStackTrace ();
            }
            catch (InvalidXmlAttributeContentException ex)
            {
                ex.printStackTrace ();
            }
            catch (InvalidXmlElementNameException ex)
            {
                ex.printStackTrace ();
            }
        }
       
    }
   
    return data;
   
}
Erstellt wird dabei aber leider nur so was:
Code:
"name":"root"
"list":
[
  {
    "name":"wert"
    "type":"string"
    "description":"..."
    "wert":"hallo"
    [
      {
        null
      }
    ]
    "name":"root"
    "list":
    [
      {
        // Enthält alle Elemente des root Elementes [erstes Element in der Liste]
      }
    ]
    "name":"root"
    "list":
    [
      {
        // Enthält alle Elemente des root Elementes [erstes Element in der Liste]
      }
    ]
    "name":"root"
    "list":
    [
      {
        // Enthält alle Elemente des root Elementes [erstes Element in der Liste]
      }
    ]
    "name":"left"
    "type":"short"
    "description":"..."
    "wert":"hallo"
    [
      {
        null
      }
    ]
    "name":"root"
    "list":
    [
      {
        // Enthält alle Elemente des root Elementes [erstes Element in der Liste]
      }
    ]
  }
]
Hab irgendwie gerade en Brett vorm Kopf, denn ich seh den Fehler nicht :oops: ...

yankee 11. Mär 2007 14:58

Re: [JAVA] XML
 
Code:
private StorageItem loadFromElement ( 
        Element item,
        StorageItem data )
Du übergibst data UND
Code:
return data;
returnst es?
Wenn du dir deinen Quelltext nochmal genau ansiehst könnte das die Fehlerquelle sein. Zumindest ist es eine.
Ich würde mal sagen du hörst einfach auf data zu übergeben und deklarierst es als eine lokale Variable der Funktion, die du, wie bisher auch returnst.

Dunedain 11. Mär 2007 16:54

Re: [JAVA] XML
 
Zitat:

Zitat von yankee
Wenn du dir deinen Quelltext nochmal genau ansiehst könnte das die Fehlerquelle sein. Zumindest ist es eine.

Eine? Schön, wenn es so gewesen wäre. Weiß gar nicht, was ich mir dabei gedacht habe... :oops:
Aber jetzt funktioniert alles, wie es sollte :-D

Danke für deine tatkräftige Unterstützung :thumb:

yankee 11. Mär 2007 16:56

Re: [JAVA] XML
 
Zitat:

Zitat von Dunedain
Danke für deine tatkräftige Unterstützung :thumb:

Gerne doch :-).
Sry das OT...
Aber kann du mir ghanz kurz sagen, wo dein Nick herkomtm? Der kommt mir so verdammt bekannt vor...

Dunedain 11. Mär 2007 18:44

Re: [JAVA] XML
 
[offtopic]
Wird eigentlich Dúnedain geschrieben und kommt aus dem "Herr der Ringe".
Aragorn tritt anfangs unter diesem Namen auf, obwohl der Name eigentlich eine Bevölkerungsgruppe bzw. ein Königreich bezeichnet.
[/offtopic]


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:55 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz