自动XML校正器

时间:2011-11-29 09:57:55

标签: xml parsing

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

有没有办法在将XML投放到XML解释器之前自动修复它?

示例:

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

以上代码应以某种方式转换为

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

我无法在导出期间执行此操作。我所拥有的是最终的XML。

我考虑过搜索<{node}></{node}>的组合以及没有匹配的组合。但是,结构可以是多层次的,例如:

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

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

1 个答案:

答案 0 :(得分:0)

基本上这就是我的所作所为:

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

Regex pattern = new Regex(@"<(/?)([a-zA-Z]\w*)(?:(?>!<).)*?(/?)>");

找到比赛后,我从一个到另一个,逃避了它们之间的所有文字。

使用堆栈,我将每个打开的标签推入其中,如果匹配是关闭标签,则弹出。如果弹出的标记不对应 - 开始标记或结束标记无效,那么我进一步调查了匹配,然后进一步向下查找它实际上是哪一个。

很抱歉没有提供更多代码,但它已经在迁移到客户的服务器上了。这个匆忙的解决方案就是我所留下的正则表达式。