.net 将类XML文档转换为XML

.net 将类XML文档转换为XML,.net,xml,.net,Xml,我有一个与XML格式非常接近的文档,它是从外部来源获得的,我无法在源代码处修复它。但是这个软件在某种程度上是一个行业标准,所以它掌握在我们很多用户的手中,更换这些系统可能会让我们的用户付出巨大的代价。他们不会这么做的。有时,该文档以完全格式化的XML形式出现,但在某些情况下,该文档在某些元素的内部文本中包含无效文本。一个这样的例子是。我在用户输入的文本字段中发现了这些内容,而源应用程序在生成可能是XML文档时没有清理这些内容 我有一个.net应用程序正在使用XmlReader对象读取此文档。在大

我有一个与XML格式非常接近的文档,它是从外部来源获得的,我无法在源代码处修复它。但是这个软件在某种程度上是一个行业标准,所以它掌握在我们很多用户的手中,更换这些系统可能会让我们的用户付出巨大的代价。他们不会这么做的。有时,该文档以完全格式化的XML形式出现,但在某些情况下,该文档在某些元素的内部文本中包含无效文本。一个这样的例子是。我在用户输入的文本字段中发现了这些内容,而源应用程序在生成可能是XML文档时没有清理这些内容

我有一个.net应用程序正在使用XmlReader对象读取此文档。在大多数情况下,它会成功,因为在大多数情况下,文档是有效的XML文档。但如果我得到一个不是XML文档的文档,它会抛出一个异常,原因很明显


有人知道在加载之前将此文档转换为XML的方法吗?或者有没有办法让XmlReader更优雅地处理错误?阻止此文档成为有效XML文档的数据实际上对我来说并不重要,可能会被丢弃。任何对我来说重要的东西都被格式化为有效的XML。

另一个系统没有提供XML。不要认为它是无效的XML,或者几乎是XML,或者是有错误的XML。把它想象成YXQ。如果有人以YXQ格式向您发送数据,您首先需要掌握或编写ehat YXQ is的规范,然后需要为其编写解析器,可能是将其转换为XML的解析器。也许YXQ与某些现有解析器(如TagSoup或validator.nu)将处理的语言足够相似;您可以试试看,假设您有足够大的YXQ样本使您的测试有意义


另外,还有一种非常好的标准交换格式,许多人都使用这种格式,称为XML。它的最大优点是解析器已经存在于每个可能的平台上。人们用它为自己节省了很多钱。为什么不建议您的数据供应商?他们可能会发现他们获得了更多的客户。

您可以对文档进行预处理,查找特定的无效序列,并在将文档提供给XMLReader之前进行清理。问题是没有特定的模式。这是用户生成的数据,源系统只是将这些数据注入到他们的XML中,而没有对其进行清理。我更新了这个问题,以反映这样一个事实:从技术上讲,此文档不是XML文档。虽然我觉得这是一种挑剔的否决票。@mike在以XML以外的格式查看了该文件后,我确实找到了一种模式,不容易发现,但我找到了一种我认为足够的模式。至少在下一个错误出现之前。谢谢。我不知道这是不是一个严肃的答案。我更新了这个问题,以澄清我收到的不是技术上的XML。如果否决票消失,那就太好了。我想我应该考虑一下我对这个问题的措辞,从来没有任何时候我认为这个文件是XML,我只是认为堆栈溢出社区中的聪明人可以自己推断出这个事实,也许可以提出一些实际的建议来帮助我解决这个问题。我不想让我自己或我的队友在罕见的情况下手动修复它。@Saggio-我认为这是严重的。我得到了一个严重的反对票,我认为这是我应得的。这是一个严肃的回答,尽管我为我的讽刺道歉。我坚信标准一致性的重要性。许多工程失败发生在人们通过接受不合标准的部件并将其弯曲以适应需要而抄近路的时候。他们认为自己是务实的,但实际上是在播下后续灾难性系统故障的种子。这是不专业的行为。我知道,对不起,我太苛刻了,我知道,如果你昨天没有经理和客户在你的脖子上喘着粗气来发货,那么你更容易采取道德立场。但最终,当我们牺牲了工程原理并屈服于这些压力时,我们最终付出了代价:从长远来看,代价远远高于第一次做对。