Entwickler-Ecke
IO, XML und Registry - XML Schema einlesen bzw. vearbeiten.
Matze3@gmx.de - Mi 16.02.11 10:33
Titel: XML Schema einlesen bzw. vearbeiten.
Hallo alle miteinander,
ich habe folgendes Problem:
Ich würde gerne Inhalte aus *.xsd Dateien ermitteln.
Beispiel xsd Datei: (Datei muss nicht auf Korrektheit überprüft werden)
XML-Daten
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:
| xml version="1.0"?><xs:schema xmlns:aqadm="http://xyz/aqadm" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xdb="http://xmlns.oracle.com/xdb" targetNamespace="http://xyz/aqadm" elementFormDefault="qualified" attributeFormDefault="unqualified" xsi:schemaLocation="http://xmlns.oracle.com/xdb http://xmlns.oracle.com/xdb/XDBSchema.xsd" xdb:schemaURL="http://xyz/aqadm/SREPORT_TEMPLATE_XT.xsd"> <xs:include schemaLocation="http://xyz/aqadm/EXTERNAL_BINARY.xsd"/> <xs:element name="SREPORT_TEMPLATE_XT" type="aqadm:SREPORT_TEMPLATE_XTType" xdb:SQLType="SREPORT_TEMPLATE_XT"/> <xs:complexType name="SREPORT_TEMPLATE_XTType" xdb:SQLType="SREPORT_TEMPLATE_XT"> <xs:sequence> <xs:element name="SRPTT_ID" type="xs:hexBinary" xdb:SQLName="SRPTT_ID" xdb:SQLType="RAW"/> <xs:element name="SRPTTK_ID" type="xs:hexBinary" xdb:SQLName="SRPTTK_ID" xdb:SQLType="RAW"/> <xs:element name="SRPTT_REV_NO" type="xs:integer" xdb:SQLName="SRPTT_REV_NO" xdb:SQLType="INTEGER"/> <xs:element name="SRPTT_TYPE" type="xs:integer" xdb:SQLName="SRPTT_TYPE" xdb:SQLType="INTEGER"/> <xs:element name="SRPTT_SCHEMA" type="aqadm:EXTERNAL_BINARY" xdb:SQLName="SRPTT_SCHEMA" xdb:SQLType="BLOB"/> <xs:element name="SRPTT_EXAMPLE_XML" type="aqadm:EXTERNAL_BINARY" minOccurs="0" xdb:SQLName="SRPTT_EXAMPLE_XML" xdb:SQLType="BLOB"/> <xs:element name="SRPTT_VALID_FROM" type="xs:dateTime" xdb:SQLName="SRPTT_VALID_FROM" xdb:SQLType="TIMESTAMP"/> <xs:element name="SRPTTP_ID" type="xs:hexBinary" minOccurs="0" xdb:SQLName="SRPTTP_ID" xdb:SQLType="RAW"/> <xs:element name="SRPTT_GENDATE" type="xs:dateTime" minOccurs="0" xdb:SQLName="SRPTT_GENDATE" xdb:SQLType="TIMESTAMP"/> <xs:element name="SRPTT_GENUSER" type="xs:hexBinary" minOccurs="0" xdb:SQLName="SRPTT_GENUSER" xdb:SQLType="RAW"/> <xs:element name="SRPTT_MODDATE" type="xs:dateTime" minOccurs="0" xdb:SQLName="SRPTT_MODDATE" xdb:SQLType="TIMESTAMP"/> <xs:element name="SRPTT_MODUSER" type="xs:hexBinary" minOccurs="0" xdb:SQLName="SRPTT_MODUSER" xdb:SQLType="RAW"/> <xs:element name="SRPTT_MODPROCDATE" type="xs:dateTime" minOccurs="0" xdb:SQLName="SRPTT_MODPROCDATE" xdb:SQLType="TIMESTAMP"/> <xs:element name="SRPTT_MODPROCUSER" type="xs:hexBinary" minOccurs="0" xdb:SQLName="SRPTT_MODPROCUSER" xdb:SQLType="RAW"/> <xs:element name="SLAN_ID" type="xs:hexBinary" minOccurs="0" xdb:SQLName="SLAN_ID" xdb:SQLType="RAW"/> <xs:element name="SRPTT_FILENAME" type="xs:string" xdb:SQLName="SRPTT_FILENAME" xdb:SQLType="VARCHAR2"/> <xs:element name="SRPTT_TEMPLATE" type="aqadm:EXTERNAL_BINARY" minOccurs="0" xdb:SQLName="SRPTT_TEMPLATE" xdb:SQLType="BLOB"/> </xs:sequence> </xs:complexType> </xs:schema> |
Ich würde nun gerne die xdb:schemaURL herauslesen und alle <xs:include Elemente ermitteln.
Ich habe versucht die xdb Datei wie eine xml Datei zu verarbeiten (XmlReader). Die Knoten konnte ich ermitteln die einzelnenn Attribute wie z.B. xdb:schemaURL leider nicht.
Kann mir vielleicht jemand noch einen Lösungsansatz zukommen lassen.
Vielen Dank im Voraus.
Matze
P.S. Bin leider noch C Sharp Anfänger
Moderiert von
Kha: XML-Tags hinzugefügtModeriert von
Kha: Topic aus Multimedia / Grafik verschoben am Mi 16.02.2011 um 10:10
Kha - Mi 16.02.11 11:12
:welcome: in der EE!
Zeig uns doch einmal, was du für die Attribute schon versucht hast. Allgemein machst du dir mit einem XmlReader unnötig viel Arbeit, lies dich lieber mal in die API um XElement ein.
Trashkid2000 - Do 17.02.11 14:05
Hallo,
das Problem beim auslesen der einzelnden Knoten oder Attributen ist, dass in der Datei viele Namespaces drin sind, und Du diese beim Auslesen beachten bzw. angeben musst.
Als Beispiel mit einem XDocument würde das dann z.B. so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| XDocument doc = XDocument.Load(path); string xdbSchemaUrl = doc.Root.Attribute("{http://xmlns.oracle.com/xdb}schemaURL").Value;
foreach (XElement includedSchema in doc.Root.Descendants("{http://www.w3.org/2001/XMLSchema}include")) { string schemaLocation = includedSchema.Attribute("schemaLocation").Value; } |
Die Prüfungen auf
null habe ich mir mal gespart.
LG, Marko
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!