Hi!
Ich habe von einem anderen Programm XML-Dateien die ungefähr so ausssehen:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<SourceFile>
<Param Name="(Name)" Value="Form4"/>
<Param Name="BackColor" Value="-2147483633"/>
<Param Name="ForeColor" Value="-2147483630"/>
<Param Name="Width" Value="400"/>
<Param Name="Height" Value="300"/>
<Param Name="Visible" Value="True"/>
<Object Type="VB/Frame">
<Param Name="BorderColor" Value="-2147483642"/>
<Param Name="BackColor" Value="-2147483633"/>
<Param Name="ForeColor" Value="-2147483630"/>
<Param Name="Width" Value="217"/>
<Param Name="Height" Value="201"/>
<Param Name="Left" Value="50"/>
<Param Name="Top" Value="50"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Frame9"/>
<Object Type="VB/Frame">
<Param Name="BorderColor" Value="-2147483642"/>
<Param Name="BackColor" Value="-2147483633"/>
<Param Name="ForeColor" Value="-2147483630"/>
<Param Name="Width" Value="185"/>
<Param Name="Height" Value="169"/>
<Param Name="Left" Value="16"/>
<Param Name="Top" Value="16"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Frame8"/>
<Object Type="VB/Shape">
<Param Name="BackColor" Value="-2147483643"/>
<Param Name="BorderColor" Value="0"/>
<Param Name="FillColor" Value="0"/>
<Param Name="Width" Value="25"/>
<Param Name="Height" Value="25"/>
<Param Name="Left" Value="40"/>
<Param Name="Top" Value="24"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Shape8"/>
</Object>
<Object Type="VB/Shape">
<Param Name="BackColor" Value="-2147483643"/>
<Param Name="BorderColor" Value="0"/>
<Param Name="FillColor" Value="0"/>
<Param Name="Width" Value="25"/>
<Param Name="Height" Value="25"/>
<Param Name="Left" Value="112"/>
<Param Name="Top" Value="24"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Shape9"/>
</Object>
</Object>
</Object>
</SourceFile>[/XML]
Zum Einlesen verwende ich javax.xml.stream.* und javax.xml.stream.event.*. Also StAX.
Mein Problem ist, daß ich von jedem "Object" den Wert von "(Name)" ganz am Anfang brauche.
Außerdem sollten die höherliegeden eher abgeabrietet werden, als die dadrunterliegenden (z.B. "Frame9" vor "Shape8").
Bis jetzt sehe ich nur die unschöne Lösung die Schleife ("while (parser.hasNext())" ) zu durchlaufen und alle Events von event = parser.nextEvent(); in einem Event-Array zwischenzuspeichern und neu zu durchlaufen.
"parser" ist bei mir definiert als
Die inneren "Object"-Tags rufe ich rekursiv auf. Dummerweise werden sie somit vor den äußeren Object-Tags abgearbeitet. Es sollte aber anders herum sein. Auch hier sehe ich nur als Lösung die Events in einem Array zwischenzuspeichern.
Oder hat noch jemand eine andere, bessere Lösung?
Grüße
theuserbl
Ich habe von einem anderen Programm XML-Dateien die ungefähr so ausssehen:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<SourceFile>
<Param Name="(Name)" Value="Form4"/>
<Param Name="BackColor" Value="-2147483633"/>
<Param Name="ForeColor" Value="-2147483630"/>
<Param Name="Width" Value="400"/>
<Param Name="Height" Value="300"/>
<Param Name="Visible" Value="True"/>
<Object Type="VB/Frame">
<Param Name="BorderColor" Value="-2147483642"/>
<Param Name="BackColor" Value="-2147483633"/>
<Param Name="ForeColor" Value="-2147483630"/>
<Param Name="Width" Value="217"/>
<Param Name="Height" Value="201"/>
<Param Name="Left" Value="50"/>
<Param Name="Top" Value="50"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Frame9"/>
<Object Type="VB/Frame">
<Param Name="BorderColor" Value="-2147483642"/>
<Param Name="BackColor" Value="-2147483633"/>
<Param Name="ForeColor" Value="-2147483630"/>
<Param Name="Width" Value="185"/>
<Param Name="Height" Value="169"/>
<Param Name="Left" Value="16"/>
<Param Name="Top" Value="16"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Frame8"/>
<Object Type="VB/Shape">
<Param Name="BackColor" Value="-2147483643"/>
<Param Name="BorderColor" Value="0"/>
<Param Name="FillColor" Value="0"/>
<Param Name="Width" Value="25"/>
<Param Name="Height" Value="25"/>
<Param Name="Left" Value="40"/>
<Param Name="Top" Value="24"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Shape8"/>
</Object>
<Object Type="VB/Shape">
<Param Name="BackColor" Value="-2147483643"/>
<Param Name="BorderColor" Value="0"/>
<Param Name="FillColor" Value="0"/>
<Param Name="Width" Value="25"/>
<Param Name="Height" Value="25"/>
<Param Name="Left" Value="112"/>
<Param Name="Top" Value="24"/>
<Param Name="Visible" Value="True"/>
<Param Name="(Name)" Value="Shape9"/>
</Object>
</Object>
</Object>
</SourceFile>[/XML]
Zum Einlesen verwende ich javax.xml.stream.* und javax.xml.stream.event.*. Also StAX.
Mein Problem ist, daß ich von jedem "Object" den Wert von "(Name)" ganz am Anfang brauche.
Außerdem sollten die höherliegeden eher abgeabrietet werden, als die dadrunterliegenden (z.B. "Frame9" vor "Shape8").
Bis jetzt sehe ich nur die unschöne Lösung die Schleife ("while (parser.hasNext())" ) zu durchlaufen und alle Events von event = parser.nextEvent(); in einem Event-Array zwischenzuspeichern und neu zu durchlaufen.
"parser" ist bei mir definiert als
Java:
public static XMLEventReader parser;
Die inneren "Object"-Tags rufe ich rekursiv auf. Dummerweise werden sie somit vor den äußeren Object-Tags abgearbeitet. Es sollte aber anders herum sein. Auch hier sehe ich nur als Lösung die Events in einem Array zwischenzuspeichern.
Oder hat noch jemand eine andere, bessere Lösung?
Grüße
theuserbl