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
...