Przy okazji migracji danych z Joggera na Octopress
potrzebowałem szybko dostać schemat struktury całego XML’a eksportu, aby się upewnić, czy w
XML’u nie czekają na mnie żadne niespodzianki.
Są dostępne różne narzędzia, łącznie z tymi online ,
ale okazało się że szybko da się to wykonać z wykorzystaniem klasy
XmlSchemaInference z .NET:
Pobieranie XSD z XML w C# 1
2
3
4
5
6
7
8
9
XmlReader reader = XmlReader . Create ( "jogger_eksport.xml" );
XmlSchemaSet schemaSet = new XmlSchemaSet ();
XmlSchemaInference schema = new XmlSchemaInference ();
schemaSet = schema . InferSchema ( reader );
using ( TextWriter writer = File . CreateText ( "jogger_eksport.xsd" ))
foreach ( XmlSchema s in schemaSet . Schemas ())
s . Write ( writer );
otrzymałem XSD, oczywiście bardzo ogólny, joggerowego eksportu:
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
<?xml version="1.0" encoding="windows-1250"?>
<xs:schema attributeFormDefault= "unqualified" elementFormDefault= "qualified" xmlns:xs= "http://www.w3.org/2001/XMLSchema" >
<xs:element name= "jogger" >
<xs:complexType>
<xs:sequence>
<xs:element name= "user" >
<xs:complexType>
<xs:sequence>
<xs:element name= "jid" type= "xs:string" />
<xs:element name= "domain" type= "xs:string" />
<xs:element name= "alias" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs= "unbounded" name= "entry" >
<xs:complexType>
<xs:sequence>
<xs:element name= "date" type= "xs:string" />
<xs:element name= "jid" type= "xs:string" />
<xs:element name= "level_id" type= "xs:unsignedByte" />
<xs:element name= "comment_mode" type= "xs:unsignedByte" />
<xs:element name= "subject" type= "xs:string" />
<xs:element name= "body" type= "xs:string" />
<xs:element name= "tags" type= "xs:string" />
<xs:element name= "permalink" type= "xs:string" />
<xs:element name= "trackback" type= "xs:string" />
<xs:element maxOccurs= "unbounded" name= "category" type= "xs:string" />
<xs:element minOccurs= "0" maxOccurs= "unbounded" name= "comment" >
<xs:complexType>
<xs:sequence>
<xs:element name= "date" type= "xs:string" />
<xs:element name= "nick" type= "xs:string" />
<xs:element name= "nick_url" type= "xs:string" />
<xs:element name= "body" type= "xs:string" />
<xs:element name= "ip" type= "xs:string" />
<xs:element name= "trackback" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>