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

我有一个小实用程序,它使用LINQ查找XML文件中的某些内容。 它可以非常快速而且很好地处理它们的大量收集。 但是,某一批文件中约有20%无法读取并被跳过,因为度数符号的存在为°而失败° 在文件中。 这是“对未申报实体’deg’的引用。” 以前的问题是关于。

上一个问题中提供的解决方案无法直接应用于此处。 我不能自由地修改文件,并且复制它们以及替换实例或在副本中插入标签似乎效率低下。 让LINQ忽略未声明的实体的最佳方法是什么,这对我的程序无论如何都没有影响? 或者是否有一种很好的方法可以让XDocument.Load预先提供一些实体声明?

遗憾的是,实体构成了XML( 2.1 Well-Formed XML Documents )的格式良好规则的一部分。 看起来你好像在说你希望XDocument.Load加载一个名义上是XML文件的东西,但实际上并不符合规则,这是不合理的。

如果您的用户正在传递您应该是XML文件但具有未定义实体的文件,那么您必须让他们以有效格式提供文件,或者在加载时自行管理不正确的方式,有人建议。

在我看来,根据您的限制,最新的方法是遵循示例链接并创建一些settings以沿着( validationDOM中的XML文档 )的行传递到XMLReader

如果存在未定义且未在公共模式中列出的实体,则需要创建自己的模式,该模式定义了您需要的所有实体。 因此,为XMLReader创建一个通用settings ,该settings引用您自己的自定义模式。 将必要的实体添加到此模式,因为某些文件无法加载,然后您将构建一个列表,其中包含您需要定义的所有entite,以便XML文件有效。

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