C#使用XSD来验证XML。
我使用XmlReader来处理,因为觉得XmlReader简单点。
我自己做了个例子来说明,例子里的XML不是很复杂,没有子节点的。
XML 文件(a.xml):
<?xml version="1.0" encoding="utf-8" ?>
<PROFILE>
<PROFILEID>0001</PROFILEID>
<DESCIPTION>我的内容</DESCIPTION>
<URL><![CDATA[http://www.bclc.com/app/DidYouWin/WinningNumbers/Lotto649Print.asp?YEAR=2000&MONTH=6&DRAW_DATE=&GAMEID=1]]></URL>
<NUMBERS>6</NUMBERS>
<BONUS>true</BONUS>
</PROFILE>
XSD文件(a.xsd):
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="PROFILE">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PROFILEID" type="xsd:int" />
<xsd:element name="DESCIPTION" type="xsd:string" />
<xsd:element name="URL" type="xsd:string" />
<xsd:element name="NUMBERS" type="xsd:int" />
<xsd:element name="BONUS" type="xsd:boolean" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
C#文件
XmlReaderSettings st = new XmlReaderSettings();
st.ValidationType = ValidationType.Schema;
st.Schemas.Add(null, @"a.xsd");
//设置验证xml出错时的事件。
st.ValidationEventHandler += (obj, e)=>{
//这里加上你的信息处理。
};
XmlReader xr = XmlReader.Create(@"a.xml", st);
while (xr.Read()) {
if (xr.IsStartElement()){
xr.Read();
}
}
xr.Close();