当前位置: 首页 > 编程语言 > C#

如何在C#中根据DTD验证XML文档?Share

时间:2023-04-10 16:49:25 C#

如何在C#中根据DTD验证XML文档?我不想做任何花哨的事情,我只想确保文档有效,如果无效,则打印一条错误消息。Google向我指出了这一点,但似乎不推荐使用XmlValidatingReader(至少,MonoDevelop是这么告诉我的)。编辑:我正在尝试Mehrdad的提示,但我遇到了麻烦。我想我已经掌握了大部分内容,但我无法在任何地方找到OnValidationEvent。我从哪里得到OnValidationEvent?XmlReaderSettingssettings=newXmlReaderSettings();settings.ValidationType=ValidationType.DTD;settings.ValidationEventHandler+=newValidationEventHandler(/*问题来了*/);XmlReadervalidatingReader=XmlReader.Create(fileToLoad,settings);您应该构造一个适当的XmlReaderSettings对象并将其作为参数传递给XmlReader.Create方法,而不是直接创建XmlValidatingReader类:varsettings=newXmlReaderSettings{ValidationType=ValidationType.DTD};settings.ValidationEventHandler+=newValidationEventHandler(OnValidationEvent);varreader=XmlReader.Create("file.xml",settings);其余不变。PSOnValidationEvent是您声明的用于处理验证事件的方法的名称。显然,如果您不想订阅XmlReader引发的验证事件,则可以删除该行。varmessages=newStringBuilder();varsettings=newXmlReaderSettings{ValidationType=ValidationType.DTD};settings.ValidationEventHandler+=(sender,args)=>messages.AppendLine(args.Message);varreader=XmlReader.Create("file.xml",settings);if(messages.Length>0){//记录验证错误//抛出异常//等等}ValidationEventHandlerLambda表达式类型推断的详细说明:在VisualStudio.NET中,为ValidateXml创建一个新的VisualC#控制台应用程序项目。在Class1.cs的开头添加两条using语句如下:usingSystem.Xml;//对于使用System.Xml.Schema的XmlTextReader和XmlValidatingReader;//对于Class1.cs中的XmlSchemaCollection(后面会用到),在Main方法开始之前声明一个布尔变量isValid,像这样:privatestaticboolisValid=true;//如果发生验证错误,//在验证事件处理程序中将此标志设置为false。在Main方法中创建一个XmlTextReader对象以从文本文件中读取XML文档,然后创建一个XmlValidatingReader来验证此XML数据,如下所示:XmlTextReaderr=newXmlTextReader("C:\MyFolder\ProductWithDTD.xml");XmlValidatingReaderv=newXmlValidatingReader(r);XmlValidatingReader对象的ValidationType属性指示所需的验证类型(DTD、XDR或架构)。将此属性设置为DTD,如下所示:v.ValidationType=ValidationType.DTD;如果发生任何验证错误,验证阅读器将生成一个验证事件。添加以下代码以注册验证事件处理程序(您将在步骤7中实现MyValidationEventHandler方法):v.ValidationEventHandler+=newValidationEventHandler(MyValidationEventHandler);添加以下代码以读取和验证XML文档。如果发生任何验证错误,将调用MyValidationEventHandler来解决错误。此方法将isValid设置为false(请参阅第8步)。您可以在验证后检查isValid的状态,以查看文档是有效还是无效。while(v.Read()){//可以在这里添加代码来处理内容。}v.Close();//检查文档是否有效。if(isValid)Console.WriteLine("文件有效");elseConsole.WriteLine("文档无效");在Main方法之后编写MyValidationEventHandler方法,如下所示:publicstaticvoidMyValidationEventHandler(objectsender,ValidationEventArgsargs){isValid=false;Console.WriteLine("验证事件n"+args.Message);构建并运行应用程序。应用程序应该报告XML文档是有效的。示例:在VisualStudio.NET中,修改ProductWithDTD.xml使其无效(例如,删除Msoliman元素)。再次运行应用程序。您应该收到以下错误消息:以上是C#教程:如何在C#中根据DTD验证XML文档?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——ValidationeventElement'Product'hasinvalidcontent。应为“产品名称”。file:///C:/MyFolder/ProductWithDTD.xml(4,5)处发生错误。文档无效本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: