我试图用C#.NET 4.0中的重复根元素以编程方式清理无效的XML。我想要做的是所有的内部元素合并到一个根元素,并删除重复的根源,使用重复的根元素解析XML
<a>
<b></b>
</a>
<a>
<c></c>
</a>
成为
<a>
<b></b>
<c></c>
</a>
然而,复制根元素也可以出现在内部XML。在这种情况下,我们不希望来取代它,这样
<a>
<a></a>
<b></b>
</a>
<a>
<c></c>
<a></a>
</a>
成为
<a>
<a></a>
<b></b>
<c></c>
<a></a>
</a>
而且,复制根元素是不能保证总是<a>
;它可以有任何名字。
到目前为止,我一直试图想出一些优雅的正则表达式来完成这项任务,如/<((.|\n|\r)*?)>(.|\n|\r)*<\/\1>/
,但与此相关的问题是内部XML上的贪婪匹配过多匹配,并且非贪婪内部XML匹配匹配太少。
我希望我不必诉诸创建一个堆栈来计算打开和关闭标记,以确定我何时回到文档的根目录。我正在寻找解决此问题的简单而优雅的方法。
开源的第三方库是潜在的可接受的解决方案,如果其中一个处理这种情况,但我宁愿避免它们。
有没有人有任何想法?
啊!这个答案揭示了我在.NET中处理XML时的无知。我不知道有一种方法可以自动分析不符合规范的XML。谢谢! –