ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
4980
4980
EMPFEHLEN
-
Hallo,
ich muss ein xsd file in java einlesen und als ein jTree darstellen.
Achtung. Kein xml file! Es ist ein xsd file.
Mit welchem Parser geht denn das am besten?
Wie sollte ich am besten vorgehen.
Vielleicht kennt es ja jemand. Es sollte so wie in oXygen aussehen, wenn man sich eine xsd Datei in der logischen Baumdarstellung ansieht.
Vielen vielen Dank
-
Eine XML Schema Definition wird selbst in XML notiert. Ein XML-Parser wird also das tun was du möchtest.
-
Hallo,
ein XSD-File ist auch ein XML-File, also müsste es mit einem normalen XML-Parser funktionieren.
http://www.tutorials.de/forum/java/1...-abbilden.html
Wie der Baum letztendlich aussehen soll, musst du mir einem CellRenderer definieren.
MFG
zEriXEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Hallo,
danke für die schnellen Antworten. Mein problem liegt darin wie ich den Baum am geschicktesten zusammenbau. Da es sich um eine xsd Datei handelt, ist die Struktur nicht wirklich als eine Baumstruktur erkennbar.
Ich will mal ein Beispiel geben wie ich einige xsd elemente als Baum darstellen würde.
...
<xs:complexType name="Person">
<xs:sequence>
<xs:element name="Vorname" type="String" />
<xs:element name="Nachname" type="String" />
</xs:sequence>
</xs:complexType>
...
<xs:complexType name="Gruppe">
<xs:sequence>
<xs:element name="Mitglied" type="Person" />
<xs:element name="GruppenName" type="xs:String" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Haus">
<xs:sequence>
<xs:element name="Bewohner" type="Person" />
<xs:element name="Hausnummer" type="xs:Integer" />
</xs:sequence>
</xs:complexType>
Daraus würde ich gern folgenden baum haben:
Vielen Dank.HTML-Code:root + Person + Vorname + Nachname + Gruppe + Person + Vorname + Nachname + Gruppenname + Haus + Person +Vorname +Nachname + Hausnummer
Schöne Grüße
-
Erstmal solltest du dir eine Datenstruktur überlegen in welche du die geparsten Daten ablegen kannst so dass du sie später leicht in einen Baum umwandeln kannst.
Sind die Daten fertig geparst gehst fängst du an den Baum aufzubauen. Dabei schaust du bei jedem Element im Typ nach ob dies ein Standardtyp ist oder ob dieser in deinen geparsten Daten zu finden ist (Name als Key und Objekt als Value in eine HashMap z.B.). Ist dies der Fall nutzt du die Daten des gefundenen Typs im Baum.
-
XSD kann man mit Xerxes einlesen (+ zugehöriges XML)
Jetzt musst du dich nur noch in die XSAPI von Xerces einarbeiten.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import org.apache.xerces.xs.ElementPSVI; import org.apache.xerces.xs.XSAnnotation; import org.apache.xerces.xs.XSElementDeclaration; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; public final class DocumentManager { Document loadDocument(String documentURL) throws Exception { InputStream in = new URL(documentURL).openStream(); Document doc = builder.parse(in); in.close(); if (!doc.getDocumentElement().isSupported("psvi", "1.0")) throw new Exception("apache xerxes psvi not supported"); return doc; } DocumentBuilderFactory dbf; DocumentBuilder builder; public DocumentManager(String schemaURL) throws Exception { // Builder parser = new Builder(false); // Document doc = parser // .build(new File( // new URI( // "file:///C:/developer/workspace/2011-11-23%20rulesmanager%20prototype/mapping-schema.xsd"))); // Element root = doc.getRootElement(); // Load up the document dbf = DocumentBuilderFactory.newInstance(); // dbf is JAXP DocumentBuilderFactory // all of the following features must be set: dbf.setNamespaceAware(true); dbf.setValidating(true); dbf.setAttribute("http://apache.org/xml/features/validation/schema", Boolean.TRUE); // you also must specify Xerces PSVI DOM implementation // "org.apache.xerces.dom.PSVIDocumentImpl" dbf.setAttribute( "http://apache.org/xml/properties/dom/document-class-name", "org.apache.xerces.dom.PSVIDocumentImpl"); // Set up an XML Schema validator, using the supplied schema ; InputStream in = new URL(schemaURL).openStream(); Source schemaSource = new StreamSource(in); SchemaFactory schemaFactory = SchemaFactory .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(schemaSource); // Instead of explicitly validating, assign the Schema to the factory dbf.setSchema(schema); // Parsers from this factory will automatically validate against the // associated schema builder = dbf.newDocumentBuilder(); in.close(); } Document createDocument() throws Exception { Document doc = builder.newDocument(); if (!doc.getDocumentElement().isSupported("psvi", "1.0")) throw new Exception("apache xerxes psvi not supported"); return doc; } } //use like DocumentManager m = new DocumentManager( "schema.xsd"); //jetzt entweder passendes XML laden Document d = m .loadDocument("document.xml"); String ns = d.getDocumentElement().getNamespaceURI(); ElementPSVI e = (ElementPSVI) d.getElementsByTagNameNS(ns, "if-rule") .item(0); XSElementDeclaration decl = e.getElementDeclaration(); //oder Dokument erzeugen Document d = m .createDocument(); ElementPSVI e = (ElementPSVI) d.createElementNS("your-namespace", "root-element-tag"); //et voilà: die Deklaration des root Elements. XSElementDeclaration decl = e.getElementDeclaration();
Greetz
Kwanta
-
09.12.11 11:06 #7Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!
Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
-------------------------------------------------------------------------------------------------
Ich beantworte keine Fragen per PN !!
Stellt Eure Fragen im Forum - dann haben alle etwas davon !!
-
Ich habe ewig nach dieser Lösung gesucht, bin unter anderem auch auf diesen Post gestoßen. Deshalb hab ich gedacht, ich poste mal meine Lösung. Hätte vielleicht was zum Datum sagen sollen :-P
-
11.12.11 15:17 #9
Eine XSD mit einem XML-Parser einzulesen und als Baum auszugeben, erfordert viel "Handarbeit". Ich würde aus der XSD mit JAXB-Tool die Klassen generieren lassen: "jaxb\bin\xjc.bat schoko.xsd -d src -p jaxb.schoko.generated", siehe dazu auch http://www.tutorials.de/java/224045-...erstellen.html.
Durch die Beziehungen zwischen den Klassen kannst Du diese optimal für den Aufbau des Baums benutzen.CU schnuffie
Fragliche Fragen stellende Fragensteller sind für verantwortungslose Antworten antwortender verantwortlicher Antworter selbst verantwortlich.
Ähnliche Themen
-
JTree aus Collection von File-Objekten erstellen
Von Martin240 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 27.09.10, 14:44 -
XML file als Tree in SWT darstellen
Von GRU_EGO im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 06.01.07, 01:08 -
JTree - Blatt als Knoten darstellen
Von Haruka im Forum JavaAntworten: 2Letzter Beitrag: 01.09.05, 16:35 -
Unicode aus Datei lesen und darstellen?
Von Math55 im Forum JavaAntworten: 1Letzter Beitrag: 05.08.05, 13:56 -
Bild(er) aus DB lesen/darstellen
Von markberg im Forum PHPAntworten: 4Letzter Beitrag: 16.07.05, 11:13





Zitieren



noch möchte ....... ich weiß es nicht ...... 
Login





