C#中的XML修复

时间:2009-09-10 23:13:23

标签: c# xml repair

我的应用程序使用的文件格式是基于Xml的。我刚买了一个有拙劣的xml文件的客户。该东西包含近90,000行,由于某种原因,随机散布着大约20“=”符号。

我的大多数人都有一个XmlException,其行号和字符位置允许我找到有问题的字符并手动删除它们。我刚刚开始编写一个自动执行此过程的小应用程序,但我想知道是否有更好的方法来修复损坏的xml文件。

拙劣的线条示例:

<item name="InstanceGuid" typ=e_name="gh_guid" type_code="9">ee330f9f-a1e2-451a-8c6d-723f066a6bd4</item>
                             ↑ (this is supposed to be [type_name])

3 个答案:

答案 0 :(得分:1)

您可以搜索没有双引号的任何等号。编写正则表达式(正则表达式)非常简单。

或者您可以在高级文本编辑器中打开文件,然后通过相同的正则表达式搜索来查找和替换/删除。一些文本编辑器允许您使用正则表达式查找/替换,因此您可以搜索任何等号,而不是双引号,只需将其删除即可。

当然,我会保留原文的副本,因为如果你在内部XML中有相同的符号,那么它可能会搞乱它等等。

答案 1 :(得分:1)

使用正则表达式首先清理xml。

类似的东西:

s/([^\s"]+)=([^\s"]+="[^"]*")/\1\2/

显然,这需要移植到您选择的正则表达式引擎:)

答案 2 :(得分:1)

在TextPad中,如果使用正则表达式= [^“]进行搜索,您会发现任何=符号后面没有”

这应该找到文档中出现rogue =符号的位置。要替换它们,请先在TextPad中打开文档。然后按F8。

在对话框中输入以下内容:

找到:= \([^“] \)

替换为:\ 1

选中“正则表达式”框,选择“所有文档”,然后单击“全部替换”

这应匹配所有=后面没有“并且将=替换为跟随它的符号。

typename =“test”typ = ename =“test”

将成为

typename =“test”typename =“test”