小编Dre*_*kes的帖子

使用重复的根元素解析XML

我试图以编程方式在C#.NET 4.0中使用重复的根元素清理无效的XML.我想要做的是将所有内部元素合并到一个根元素中并删除重复根,以便这样做

<a>
    <b></b>
</a>
<a>
    <c></c>
</a>
Run Code Online (Sandbox Code Playgroud)

<a>
    <b></b>
    <c></c>
</a>
Run Code Online (Sandbox Code Playgroud)

但是,重复的根元素也可能出现在内部XML中.在这种情况下,我们不想替换它,所以

<a>
    <a></a>
    <b></b>
</a>
<a>
    <c></c>
    <a></a>
</a>
Run Code Online (Sandbox Code Playgroud)

<a>
    <a></a>
    <b></b>
    <c></c>
    <a></a>
</a>
Run Code Online (Sandbox Code Playgroud)

此外,不保证重复的根元素始终是<a>; 它可以有任何名字.

到目前为止,我一直在尝试考虑某种优雅的Regex来完成这项任务,例如/<((.|\n|\r)*?)>(.|\n|\r)*<\/\1>/,但问题是内部XML上的贪婪匹配过多,内部XML上的非贪婪匹配比赛太少了.

我希望我不必使用创建堆栈来计算打开和关闭标签,以确定我何时回到文档的根目录.我正在寻找一种解决这个问题的简单而优雅的方法.

如果其中一个处理这种情况,开源的第三方库是可能可接受的解决方案,但我宁愿避免使用它们.

有没有人有任何想法?

c# regex xml

-1
推荐指数
1
解决办法
671
查看次数

标签 统计

c# ×1

regex ×1

xml ×1