Autor Beitrag
Matze3@gmx.de
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 16.02.11 10:33 
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)



ausblenden 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 user profile iconKha: XML-Tags hinzugefügt
Moderiert von user profile iconKha: Topic aus Multimedia / Grafik verschoben am Mi 16.02.2011 um 10:10
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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:
ausblenden 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

Für diesen Beitrag haben gedankt: Matze3@gmx.de