xml 数据验证 (XML模式)(转)
验证是通过xsd模式或者dtd或者xdr模式对xml文档内容强制执行规则的过程。可以有两种方式定义xml 文档的结构:DTD和XML模式
对于xsd文件,在vs2005中之需要添加一个xml构架文件就可以了,再在其上设置元素关系如图
(只要在authors和author中设置为 Unnamed complexType)
![](http://hiphotos.baidu.com/haoyongsheng/pic/item/0223a3247df6530b4c088dea.jpg)
其xml文件如下:
<?xml version="1.0"?>
<authors>
<author>
<au_id>172-32-1176</au_id>
<au_lname>White</au_lname>
<au_fname>Johnson</au_fname>
<phone>408 496-7223</phone>
<address>10932 Bigge Rd.</address>
<city>Menlo Park</city>
<state>CA</state>
<zip>94025</zip>
<contract>true</contract>
</author>
<author>
<au_id>213-46-8915</au_id>
<au_lname>Green</au_lname>
<au_fname>Marjorie</au_fname>
<phone>415 986-7020</phone>
<address>309 63rd St. #411</address>
<city>Oakland</city>
<state>CA</state>
<zip>94618</zip>
<contract>true</contract>
</author>
</authors>
<authors>
<author>
<au_id>172-32-1176</au_id>
<au_lname>White</au_lname>
<au_fname>Johnson</au_fname>
<phone>408 496-7223</phone>
<address>10932 Bigge Rd.</address>
<city>Menlo Park</city>
<state>CA</state>
<zip>94025</zip>
<contract>true</contract>
</author>
<author>
<au_id>213-46-8915</au_id>
<au_lname>Green</au_lname>
<au_fname>Marjorie</au_fname>
<phone>415 986-7020</phone>
<address>309 63rd St. #411</address>
<city>Oakland</city>
<state>CA</state>
<zip>94618</zip>
<contract>true</contract>
</author>
</authors>
一个验证实例:
private StringBuilder _builder = new StringBuilder();
void Page_Load(object sender, EventArgs e)
{
string xmlPath = Request.PhysicalApplicationPath + @"\App_Data\Authors.xml";
string xsdPath = Request.PhysicalApplicationPath + @"\App_Data\hys.xsd";
XmlReader reader = null;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler);
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, XmlReader.Create(xsdPath));
reader = XmlReader.Create(xmlPath, settings);
while (reader.Read())
{
}
if (_builder.ToString() == String.Empty)
Response.Write("Validation completed successfully.");
else
Response.Write("Validation Failed. <br>" + _builder.ToString());
}
void Page_Load(object sender, EventArgs e)
{
string xmlPath = Request.PhysicalApplicationPath + @"\App_Data\Authors.xml";
string xsdPath = Request.PhysicalApplicationPath + @"\App_Data\hys.xsd";
XmlReader reader = null;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler);
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(null, XmlReader.Create(xsdPath));
reader = XmlReader.Create(xmlPath, settings);
while (reader.Read())
{
}
if (_builder.ToString() == String.Empty)
Response.Write("Validation completed successfully.");
else
Response.Write("Validation Failed. <br>" + _builder.ToString());
}
void ValidationEventHandler(object sender, ValidationEventArgs args)//定义ValidationEventHandler事件处理程序
{
_builder.Append("Validation error: " + args.Message + "<br>");
}
{
_builder.Append("Validation error: " + args.Message + "<br>");
}