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

在C#中使用未关闭的标记读取XML分享

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

C#学习教程:在C#中读取带有未闭合标记的XML该程序还能够加载日志以复制网格视图。由于程序在执行时写入日志文件,如果它崩溃,日志文件将丢失结束标记。我仍然希望能够加载这些XML文件,因为仍然有很多有价值的数据可以帮助我找出导致崩溃的原因。我想也许可以通过XML文件并关闭所有未关闭的XML标签,或者编写某种假装每个标签都关闭的“脏”XML阅读器。关于我可以做什么或如何进行的任何想法?编辑:……………………!——这里发生崩溃——!以后还是希望能出ChildFooBarBaz一…………二……。../大概它会一直工作直到它被截断......所以使用XmlReader工作......只是准备好在它到达截断点时处理它爆炸。现在XmlReaderAPI不是很令人愉快(IMO),所以您可能想移动到一些有趣数据的开头(必须自己完成),然后调用XNode.ReadFrom(XmlReader)方法以获取该数据一个简单的表格。然后移动到下一个元素的开头并执行相同的操作,依此类推。示例代码:usingSystem;使用System.Linq;使用System.Xml;使用System.Xml.Linq;类程序{staticvoidMain(string[]args){使用(XmlReaderreader=XmlReader.Create("test.xml")){while(true){while(reader.NodeType!=XmlNodeType.Element||reader.LocalName!="Child"){if(!reader.Read()){Console.WriteLine("Finished!");}}XElement元素=(XElement)XNode.ReadFrom(reader);Console.WriteLine("得到孩子:{0}",element.Value);}}}}示例XML:第一个孩子第二个孩子坏了样本输出:有孩子:第一个孩子有孩子:第二个孩子未处理的异常:System.Xml.XmlException:发生意外的文件结尾以下元素未关闭:孩子,父母,根。第5行,位置18。在System.Xml.XmlTextReaderImpl.Throw(Stringres,Stringarg)在System.Xml.XmlTextReaderImpl.ParseElementContent()在System.Xml.Linq.XContainer.ReadContentFrom(XmlReaderr)在System.Xml。System.Xml.Linq中的Linq.XContainer.ReadContentFrom(XmlReaderr,LoadOptionso)。XElement.ReadElementFrom(XmlReaderr,LoadOptionso)atSystem.Xml.Linq.XNode.ReadFrom(XmlReaderreader)atProgram.Main(String[]args)显然你想捕获异常,但你可以看到它设法读取正确地把前两个元素作为最后的手段,根据你在做什么,你可以使用HTML阅读器,例如HtmlAgilityPack(Nuget页面)或SGMLReader。SGMLReader实际上会将其转换为XmlDocument,因此这可能更适合您的要求。当然,HTML不是XML,所以当您使用此方法时,您会得到您所得到的。框架中没有这样的东西,默认情况下它不会这样做,并且没有一个好的解决方案来以某种方式解析通用的无效XML。您可以做的最明智的事情是在开始阅读XML之前修复它。由于只有末端被截断,您应该能够找到所有打开的选项卡并关闭它们。以上就是C#学习教程:在C#中使用未闭合的标签读取所有XML分享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: