gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:52:08 24 4
gpt4 key购买 nike

我有一个小实用程序,可以使用 LINQ 在 XML 文件中查找某些内容。它相当快速和漂亮地处理了大量的它们。然而,某批文件中约有20%的文件读取失败并被跳过,原因是文件中存在度数符号°。这是“对未声明的实体‘deg’的引用”。一个previous question是关于。

上一个问题中提供的解决方案不能直接应用到这里。我不能随意修改文件,制作它们的副本并替换实例或在副本中插入标签似乎效率低下。让 LINQ 忽略未声明的实体的最佳方法是什么,这些实体与我的程序的行为完全无关?或者是否有一种让 XDocument.Load 预先提供一些实体声明的好方法?

最佳答案

不幸的是,实体构成了 XML 格式良好规则的一部分 (2.1 Well-Formed XML Documents)。似乎您是在说您希望 XDocument.Load 加载名义上是 XML 文件的内容,但实际上并不符合规则,这是非常合理的。

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

在我看来,从您的限制来看,最简洁的方法是遵循链接到的示例并创建一些 settings 以传递到 XMLReader ( Validating an XML Document in the DOM ) 行。

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

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

关于c# - 使用 LINQ 覆盖或忽略 C# 中未声明的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8170396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com