在支持信息导出的纯文本模板的遗留应用程序中,我编写了一个将数据导出到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 < 0.3
</node>
我无法在导出期间执行此操作。我所拥有的是最终的XML。
我考虑过搜索<{node}>
和</{node}>
的组合以及没有匹配的组合。但是,结构可以是多层次的,例如:
<node>
<data>
</data>
<node>
<data>
</data>
</node>
</node>
在那种情况下,应该使用什么?一个常规的解析器算法,在循环和递归函数中有大量的过程代码,或者使用正则表达式的某种替代方法?
答案 0 :(得分:0)
基本上这就是我的所作所为:
我编写了一个找到可能标签的正则表达式。
Regex pattern = new Regex(@"<(/?)([a-zA-Z]\w*)(?:(?>!<).)*?(/?)>");
找到比赛后,我从一个到另一个,逃避了它们之间的所有文字。
使用堆栈,我将每个打开的标签推入其中,如果匹配是关闭标签,则弹出。如果弹出的标记不对应 - 开始标记或结束标记无效,那么我进一步调查了匹配,然后进一步向下查找它实际上是哪一个。
很抱歉没有提供更多代码,但它已经在迁移到客户的服务器上了。这个匆忙的解决方案就是我所留下的正则表达式。