Thema: [JAVA] XML

Einzelnen Beitrag anzeigen

Dunedain
(Gast)

n/a Beiträge
 
#14

Re: [JAVA] XML

  Alt 11. Mär 2007, 13:40
Zitat von yankee:
[...] Aber du verstehst sicherlich, dass ich keine Motovation habe dir jetzt den kompletten qt zu schrieben .
Nicht? Schade

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 ...
  Mit Zitat antworten Zitat