我使用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();