winform总结4> 工欲善其事,必先利其器之xml校验

时间:2022-07-24
本文章向大家介绍winform总结4> 工欲善其事,必先利其器之xml校验,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
@echo 根据xml自动生成xml

@echo 当前路径包含空格会导致执行失败

::pause

@echo off
set path=%~dp0

for /r %path% %%i in (*.xml) do "xsd.exe" %%i /o:"%path% ::这里的xsd.exe换成你所在电脑上vs中该工具的路径,不想找,可以直接去下边的网盘地址下载.

@echo 写入成功
::@echo 工具通过vs自带sdks 通过xml格式生成对应的校验xsd文件
::@echo 手动生成请转到 C:Program Files (x86)Microsoft SDKsWindowsv7.0ABin 
::@echo 将xml文件放到根目录,然后执行 xsd.exe 文件名的方式来生成,生成的文件为同名且后缀为xsd的文件

::pause

xml校验需要一个模版文件xsd做为格式校验。如上代码就是生成xsd,需要一个xsd文件【只要安装了vs,在vs的工具中可以找到,没有也没有关系可以从这里下载工具】

百度网盘: http://pan.baidu.com/s/1qXN2LhM 密码: x9i9

解压后将需要校验的xml文件放到同一个目录中,然后执行bat就可以得到一个xsd文件用它作为校验模版进行校验就可以了,可以修改这个xsd文件的校验方式以执行更为严格的校验

校验方式:

using System.Xml.Schema;

try
            {
                FileStream sm = "待校验的文件";
                XmlDocument doc = new XmlDocument();
                doc.Load(sm);//data.xml
                //验证xml格式是否正确 通过xsd验证 
                string error = "";
                //声明XmlSchema 
                XmlSchemaSet schemas = new XmlSchemaSet();
                schemas.Add("", XmlReader.Create(AppDomain.CurrentDomain.BaseDirectory + "Model.xsd"));
                //声明事件处理方法 
                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 (error.Length > 0)
                {
                    result.error = result.fileName + "--> XML不符合标准规范";
                }
                else
                {
                    doc.Save(AppDomain.CurrentDomain.BaseDirectory+"XMLFile/" + DateTime.Now.ToString("yyyymmddhhMMssss")+Guid.NewGuid().ToString() + ".xml");
                }
            }
            catch
            {
                result.error = result.fileName+"--> XML文档格式错误";
            }

整个过程中实际的代码量很少,基本上都不用写,最最关键的就是校验的文件。适用于同样格式的文档,但对文档格式有一定要求的地方使用。