自动XML校正器

自动XML校正器,xml,parsing,Xml,Parsing,在一个支持信息导出纯文本模板的遗留应用程序中,我编写了一个将数据导出为XML的模板。问题是,文本信息无法转义,因此我在XML值中使用了符号,而.NET中的代码在解析XML时抛出异常 在将XML提交给XML解释器之前,是否有一种方法可以自动修复XML 例如: <node> Some value which indicates that the quantity < 0.3 </node> 某些值表示数量

在一个支持信息导出纯文本模板的遗留应用程序中,我编写了一个将数据导出为XML的模板。问题是,文本信息无法转义,因此我在XML值中使用了
符号,而.NET中的代码在解析XML时抛出异常

在将XML提交给XML解释器之前,是否有一种方法可以自动修复XML

例如:

<node>
    Some value which indicates that the quantity < 0.3
</node>

某些值表示数量<0.3
上面的代码应该以某种方式转换为

<node>
    Some value which indicates that the quantity &lt; 0.3
</node>

表示数量为0.3的某个值
我无法在导出期间执行此操作。我拥有的是结束XML

我考虑过搜索
的组合,以及那些没有匹配项的组合-以逃避。但是,结构可以是多层次的,如:

<node>
    <data>
    </data>
    <node>
        <data>
        </data>
    </node>
</node>


在这种情况下,应该使用什么?在循环和递归函数中包含大量过程代码的正则解析器算法,或者使用正则表达式的某种替代方法?

所以基本上我是这样做的:

我编写了一个正则表达式,找到了可能的标记

Regex pattern = new Regex(@"<(/?)([a-zA-Z]\w*)(?:(?>!<).)*?(/?)>");
Regex模式=新的Regex(@“!”);
找到匹配项后,我从一个转到另一个,将它们之间的所有文本都转义

使用一个堆栈,我将每个打开的标记推入其中,如果匹配的是结束标记,则弹出。如果弹出的标记没有对应,那么开始标记或结束标记都是无效的,因此我进一步研究了匹配项,并在堆栈中进一步查找它到底是哪一个


很抱歉,没有提供更多代码,但它已经位于迁移到客户的服务器上。正则表达式是这个仓促解决方案剩下的全部内容。

为什么多级表达式对于您的样式搜索来说是个问题?所有标记都在多级“匹配”中。提出一种在多级节点情况下工作的算法是一个问题。我想出了一个主意并尝试了一下。这和问题有什么关系?就您所关心的这个任务而言,您有原始文本和标记。换行符只是文本。因此,如果您知道允许节点的名称,您应该能够编写一个regexp来查找所有“我不知道允许节点的名称。必须想出一些方法来检测不匹配的有效标记或损坏的标记。