使用LINQ覆盖或忽略c#中未声明的实体

本文关键字:未声明 实体 LINQ 覆盖 使用 | 更新日期: 2023-09-27 18:14:53

我有一个小实用程序,它通过使用LINQ查找XML文件中的某些内容。它处理大量的集合相当快,很好。但是,由于度数符号在文件中作为°存在,某些批文件中约有20%的文件无法读取并被跳过。这是"对未声明实体'deg'的引用",前一个问题是关于。

上一个问题提供的解决方案不能直接应用在这里。我不能随意修改文件,复制它们并替换实例或在副本中插入标记似乎效率低下。什么是让LINQ忽略未声明的实体的最好方法,这些实体与我的程序所做的完全没有关系?或者是否有获得XDocument的好方法。加载被喂食一些实体声明事先?

使用LINQ覆盖或忽略c#中未声明的实体

不幸的是,实体是XML格式良好规则的一部分(2.1格式良好的XML文档)。看起来您是在说您希望XDocument.Load加载理论上的XML文件,但实际上不符合规则,这是不合理的。

如果您的用户传递给您的应该是XML文件,但其中有未定义的实体,那么您要么必须让他们以有效的格式提供文件,要么在加载时按照建议的方式自行管理错误。

在我看来,从您的限制来看,最简洁的方法是遵循链接到的示例并创建一些settings以沿着(在DOM中验证XML文档)的行传递到XMLReader

如果有实体没有定义,也没有在公共模式中列出,你需要创建自己的模式来定义所有你需要的实体。因此,为XMLReader创建一个通用的settings,它引用您自己的自定义模式。当某些文件无法加载时,将必要的实体添加到该模式中,然后您将构建需要定义的所有实体的列表,以便XML文件有效。

然后,对于您尝试加载的每个文档,使用上面的settings为文件创建一个XMLReader,并调用XDocument(XMLReader)重载。