XML文件在文件头可以加上XML文件架构信息,用来描述文件的整体架构。用
例如下面的XML文件,schema标签就是对XML文件架构的描述。
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Diary">
<xs:complexType>
<xs:sequence>
<xs:element name="year" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="month" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="day" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" minOccurs="0" msdata:Ordinal="0" />
<xs:element name="weather" type="xs:string" minOccurs="0" msdata:Ordinal="1" />
<xs:element name="mood" type="xs:string" minOccurs="0" msdata:Ordinal="2" />
<xs:element name="Content" type="xs:string" minOccurs="0" msdata:Ordinal="3" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" />
<xs:attribute name="DeleteOr" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Username" type="xs:string" />
<xs:attribute name="Sing" type="xs:string" />
</xs:complexType>
</xs:element>
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="Diary" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Diary Username="j0EucMVmzeV1FXG78poGeg==" Sing="4YNxN5PqoQbdRPRjIvcqPO3jkDiPkaJ4w2NDS90AL5I=">
<year id="2009">
<month id="04">
<day id="07" DeleteOr="false">
<title>rQ3Zqtlt617jVD93CamKyA==</title>
<weather>BhGrMz5GzQAosLbNb8Yq1he7aYPCr4Cg+L0uiWkTQBk=</weather>
<mood>J7CTnWfS84GnkbyDoAYaGeXjd4PSFmSfugE7I+nwNo0=</mood>
<Content>cL2GzyBpawsl35+N551tBR94oAutEa9T6olrxl1ls1v/NdAOs0U7iX5yIu2V4UbAckTtg/Y3QGaXzW5WcmbAqLshPJIHnLgqG/Jm8BeBzIuVeDQYHBLeAvJJkMOm5zSEnFSgjNmiDGRZrw6DOw7E5Ur1qs5C0ovsf7lNRjMrMoJw9QCKxmaWG7R2VDKLJrvkwIsMmA9TQFVEKqvIdBJhRNc88JlqrKxhYl1fMzO2FoeL7N3WJRGB+BML/oWLu7bDj3iP3zz/yEgkrFwAJ9q34dlRF9Gw15Furikj63YJUisvoShNMp1hlnCDudeivjeEK7Ly9I8tfuMxom+BDr+UVHuvUKIV43yITLR6FErIf4SLrvfCM90qwoXab1+L2j5E</Content>
</day>
<day id="09" DeleteOr="false">
<title>xeaGaYYodEJC3opC5SIDog==</title>
<weather>BhGrMz5GzQAosLbNb8Yq1he7aYPCr4Cg+L0uiWkTQBk=</weather>
<mood>J7CTnWfS84GnkbyDoAYaGeXjd4PSFmSfugE7I+nwNo0=</mood>
<Content>cL2GzyBpawsl35+N551tBR94oAutEa9T6olrxl1ls1v/NdAOs0U7iX5yIu2V4UbAckTtg/Y3QGaXzW5WcmbAqAJh7rwjh4iG5s2brml5gaCupPl1bZm2F2lZrUeOSylIuIuZSBVWIG8A5fiQLqQ2HTxbFipVclXKj/7ynkHtqDBexBzmIu6BVFo7O/bhZ0NIHPKqUUkFITFxr6bIR3Flrj/wHDrq0Hq/CcTdRplzu4hQZ4sqkqjXgKCBiflDjCUSu5842tHBXuiqmtIskrk84V8Qb6+s11hJEBN8+4WK+u07M8sa3s1jFwmpkoIqrFrtKFgcL6UDKt3faZqgfGCQpV26g/MubzbnFxK6N8CnI8yg61Be4KUFLMV5y+EdcT8jelMdpLl9QTfRhMS0olXQtSogsdawKW1A+tiAzcCRI/L4QR+lDkKLibJMDM2+zyhSRSxnKEDBLfAPOg9D1ELM4KERN3sna/aK+mmkNdsPwbEivMPsMYLT3t6mLGYX7zXwhKGzaEWaEO3eNavPjTSRRyBq4yWNqHKKmTEZCSBCkT/3VYj2d8vpaB8zW5cXRVaVYw5/DTudNexBixjMF5+7HfdA8g/4sRzpm6Iji7vdtMIN+Pf1bO2ZFeEKFDBQVjQurQCpzSUqlDQWQuEirQr0Tx1WUrt2KVheHn6+1nQcuKE0lALtlIVH4lcj1sD2LIhslTwYaguR/B+Kex0OYWRtVgZ3AysI4LMnhU9emKc8EH8T+TRS2lTlXFm3WdWEU29R3kvV5eUPuiDit6a+G/D+QjDjG70mW0twYiZCn4vSSMiBM98O8O4oJ96h+fSVFOwtQPhW3+/rjdqLArJAfZrLmbOfW36xvPvgOy6JJN+D9ozhmA4c8h1LscoEfBKYXfF8/TfulwiBL31KPFtFhetAhPDBgDv03HY3G3v8Ho78Ur302hUL+Rm7L5UccivH0I4/flWv7gyczgWnQ24v0jBlXwKFAAIelhS7nLbjgOyhuE1xWJ7X+K020nWmLre2vQOg+Rb/GmgBY5zd6SOuFaBJBdTv4JoqsKEd52jFkucvejoY7XpL7N2/De3tnggx8oQDwXtNF24Xk5PuPYTcRHZslmOOP9Kv3L9N2mSypRW+IwA=</Content>
</day>
</month>
</year>
</Diary>
</NewDataSet>
DataSet用ReadXml方法读取XML文件时,默认用XmlReadMode.Auto模式读取,此模式下读取XML信息时,先调用ReadXmlSchema方法读取XML架构信息,然后读取XML内容信息。如果XML文件头没有schema标签,ReadXmlSchema方法就要遍历整个XML文件来抓取XML文件的架构,这样XML文件不大还感觉不出什么,假设XML文件很大,就会执行的很慢。所以建议为XML文件建立架构信息。为了加快DataSet在执行ReadXml方法时读取速度,可以选择使用XmlReadMode.IgnoreSchema模式,但是这种读取模式会忽略XML文件中的任何内联架构,如果任何XML数据与现有的架构不匹配,就会将这些数据丢弃(包括为DataSet定义的不同命名空间中的数据)。
而不管XML文件有没有架构信息,当将XML信息读进DataSet后,DataSet就会建立起XML的架构信息。在DataSet调用WriteXml方法将DataSet内信息写入XML文件时,你也可以选择是否将架构信息写入XML文件(默认是不写入),如果想将XML架构信息写入,只要在WriteXmlXml方法上加上XmlWriteMode.WriteSchema这个参数就可以,例:
dats.WriteXml(System.Windows.Forms.Application.StartupPath + "\\ch.db",XmlWriteMode.WriteSchema);