方法一:
我使用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#使用xsd文件验证XML 格式是否正确源码:
XmlReaderSettings st = new XmlReaderSettings(); XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.Add(null, spath); //st.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler); st.ValidationFlags = st.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings; st.ValidationType = ValidationType.Schema; st.Schemas.Add(schemaSet, @"a.xsd"); //设置验证xml出错时的事件。 st.ValidationEventHandler += (obj, e)=>{ //这里加上你的信息处理。 }; XmlReader xr = XmlReader.Create(@"a.xml", st); while (xr.Read()) { if (xr.IsStartElement() { xr.Read(); } } xr.Close();
方法二:
//创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xml version="1.0" encoding="utf-8" ?> doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null)); //创建一个根节点 KYTResults XmlElement results = doc.CreateElement("KYTResults"); //创建 ResultsStatus XmlNode resultsStatus = doc.CreateElement("ResultsStatus"); //创建Level XmlElement element = doc.CreateElement("Level"); element.InnerText = status ? "0" : "1"; resultsStatus.AppendChild(element); //创建Description element = doc.CreateElement("Description"); element.InnerText = msg; resultsStatus.AppendChild(element); //创建PassKey 如果用户登录失败 将加载空字符 element = doc.CreateElement("PassKey"); element.InnerText = key; resultsStatus.AppendChild(element); results.AppendChild(resultsStatus); //END 创建 ResultsStatus //创建 DataList 数据集合 if (status) { results.AppendChild(dataList); } //END 创建一个根节点 KYTResults doc.AppendChild(results); string path = Server.MapPath("/ws/xsd/ReceiveReturn.xsd"); //验证xml格式是否正确 通过xsd验证 string error = ""; //声明XmlSchema XmlSchemaSet schemas = new XmlSchemaSet(); schemas.Add("", XmlReader.Create(path)); //声明事件处理方法 ValidationEventHandler eventHandler = new ValidationEventHandler(delegate(object sender, ValidationEventArgs e) { switch (e.Severity) { case XmlSeverityType.Error: error += e.Message; break; case XmlSeverityType.Warning: break; } }); doc.Schemas = schemas; //验证xml doc.Validate(eventHandler); //检查是否有异常 如果格式不正确就抛出来 if (!"".Equals(error)) { throw new Exception(error); }
引文链接:
两篇重点推荐的博文:
XML学习之Xml Schema:一、Xml Schema概述
推荐两个XML学习网站: