0

我的应用程序使用的文件格式是基于 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])
4

3 回答 3

1

您可以搜索任何不带双引号的等号。一个正则表达式(regex)写起来很简单。

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

当然,我会保留原件的副本,因为如果您在内部 XML 中有等号,那么它可能会搞砸等等。

于 2009-09-10T23:17:47.340 回答
1

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

就像是:

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

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

于 2009-09-10T23:20:42.290 回答
1

在 TextPad 中,如果您使用正则表达式 =[^"] 进行搜索,您会发现任何 = 符号后面都不跟 "

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

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

找到什么:=\([^"]\)

替换为:\1

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

这应该匹配所有后面没有 " 的 = 并将 = 替换为它后面的符号。

typename="test" 类型=ename="test"

会变成

类型名称=“测试”类型名称=“测试”

于 2009-09-10T23:38:09.897 回答