2014-09-10 128 views
1

我有一份格式与XML格式非常接近的文档,我从外部源获得(我无法在源文件中修复它)。但是这个软件在某一点上是一个行业标准,所以它在我们的许多用户手中,并且替换这些系统可能会让我们的用户花费大笔资金。他们不会这样做。有时候这个文档是以完全格式化的XML格式出现的,但在某些情况下,文档在某些元素的InnerText中有无效文本。一个这样的例子是<=>。我在用户输入的文本字段中找到这些字段,并且在生成XML文档时源应用程序没有清理。将XML文档转换为XML

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

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

+1

您可以预处理文档,并在将文档馈送到XMLReader之前查找特定的无效序列并进行清理。 – 2014-09-10 16:05:47

+0

问题是没有特定的模式。这是用户生成的数据,源系统只是在不清除它的情况下将其注入到XML中。 – Jesse 2014-09-10 16:37:26

+0

我更新了问题以反映这个文档在技术上不是XML文档。虽然我觉得这是一个挑剔的选票。 – Jesse 2014-09-10 20:56:32

回答

0

其他系统不给你XML。不要认为它是无效的XML,或者几乎是XML,或者是其中有错误的XML。把它想成YXQ。如果有人以YXQ格式发送数据,则需要先获取(或写入)YXQ的规范,然后您需要为其编写一个解析器,或许是一个将其转换为XML的解析器。也许YXQ与一些现有的解析器如TagSoup或validator.nu会处理的语言相似;你可以试试看,假设你有足够大的YXQ样本来使你的测试有意义。

或者,有很多人使用的称为XML的非常好的标准交换格式。解析器在每个可以想象的平台上都已经存在,这具有很大的优势。人们通过使用它为自己节省了大量的金钱。为什么不建议你的数据供应商?他们可能会发现他们获得了更多的客户。

+2

我不能说这是否是一个严肃的答案 – Saggio 2014-09-10 21:01:27

+0

我更新了这个问题,以澄清这一事实,这不是我接收的技术上的XML。投票决定离开会很好。我想我应该思考我提出这个问题的方式,从来没有任何时间点我认为这个文件是XML,我只是认为堆栈溢出社区中的聪明人可以自己推断出这个事实,也许提出一些实际的建议来帮助我解决这个问题。我不希望自己或我的队友中的一个人在发生罕见情况时需要手动修复此问题。 – Jesse 2014-09-10 21:02:22

+0

@Saggio - 我认为这很严肃。我认真投了弃权票,我认为我不配。 – Jesse 2014-09-10 21:03:51