2011-11-29 84 views
1

在支持用于信息导出的纯文本模板的遗留应用程序中,我组成了一个将数据导出为XML的模板。问题是,文本信息无法转义,所以我最终得到了XML值的符号,并且我在.NET中的代码在解析XML时抛出异常。自动XML校正器

有没有办法在将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> 

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

+0

为什么您的<{node}>风格搜索的多层次是一个问题?多级别中的所有标签“匹配”。 –

+0

这是一个可以在多级节点情况下工作的算法问题。我想出了一个想法并尝试一下。 – AlexanderMP

+0

什么是多层次的问题?就你所关心的这个任务你有原始文本,并且<...>标签。换行符只是文本。因此,如果您知道允许的节点的名称,则应该能够编写正则表达式来查找所有“<”符号,并且可以找到所有“<节点”字符串,不同之处在于您必须修补的地方。 –

回答

0

所以基本上这里就是我所做的:

我由一个正则表达式,发现可能的标签。

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

找到匹配后,我从一个跳到另一个,转义了它们之间的所有文本。

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

对不起,没有提供更多的代码,但它已经在一个已经迁移到客户的服务器上。正则表达式就是我匆忙解决的问题。