我现在想把如下的xml进行相邻相同的XElement节点的合并。
<article>
<中文栏目名_FZ>简</中文栏目名_FZ>
<中文栏目名_FZ>讯</中文栏目名_FZ>
<英文栏目名_FZ>N</英文栏目名_FZ>
<英文栏目名_FZ>e</英文栏目名_FZ>
<英文栏目名_FZ>w</英文栏目名_FZ>
<英文栏目名_FZ>s</英文栏目名_FZ>
<中文标题_FZ>
<中文标题_FZ>农</中文标题_FZ>
<中文标题_FZ>业</中文标题_FZ>
<中文标题_FZ>种</中文标题_FZ>
<中文标题_FZ>植</中文标题_FZ>
</中文标题_FZ>
<一级标题_FZ>
<一级标题序号_FZ>0</一级标题序号_FZ>
<一级标题序号_FZ> </一级标题序号_FZ>
<一级标题_FZ>引</一级标题_FZ>
<一级标题_FZ>言</一级标题_FZ>
</一级标题_FZ>
<正文内容_FZ>
<正文内容_FZ>近</正文内容_FZ>
<正文内容_FZ>年</正文内容_FZ>
<正文内容_FZ>来</正文内容_FZ>
<正文内容_FZ>曝</正文内容_FZ>
<正文内容_FZ>光</正文内容_FZ>
<正文内容_FZ>的</正文内容_FZ>
<正文内容_FZ>食</正文内容_FZ>
<正文内容_FZ>品</正文内容_FZ>
<正文内容_FZ>安</正文内容_FZ>
<正文内容_FZ>全</正文内容_FZ>
<正文内容_FZ> </正文内容_FZ>
<正文内容_FZ>问</正文内容_FZ>
<正文内容_FZ>题</正文内容_FZ>
<正文内容_FZ>。</正文内容_FZ>
</正文内容_FZ>
<参考文献标题_FZ>参</参考文献标题_FZ>
<参考文献标题_FZ>考</参考文献标题_FZ>
<参考文献标题_FZ>文</参考文献标题_FZ>
<参考文献标题_FZ>献</参考文献标题_FZ>
<文献条目_FZ>
<编号_FZ>[</编号_FZ>
<编号_FZ>1</编号_FZ>
<编号_FZ>]</编号_FZ>
<文献条目_FZ> </文献条目_FZ>
<文献条目_FZ>彭</文献条目_FZ>
<文献条目_FZ>建</文献条目_FZ>
<文献条目_FZ>仿</文献条目_FZ>
<文献条目_FZ>.</文献条目_FZ>
</文献条目_FZ>
</article>
合并的结果如下:
<article>
<中文栏目名_FZ>简讯</中文栏目名_FZ>
<英文栏目名_FZ>News</英文栏目名_FZ>
<中文标题_FZ>
<中文标题_FZ>农业种植</中文标题_FZ>
</中文标题_FZ>
<一级标题_FZ>
<一级标题序号_FZ>0</一级标题序号_FZ>
<一级标题_FZ>引言</一级标题_FZ>
</一级标题_FZ>
<正文内容_FZ>
<正文内容_FZ>近年来曝光的食品安全问题。</正文内容_FZ>
</正文内容_FZ>
<参考文献标题_FZ>参考文献</参考文献标题_FZ>
<文献条目_FZ>
<编号_FZ>[1]</编号_FZ>
<文献条目_FZ>彭建仿.</文献条目_FZ>
</文献条目_FZ>
</article>请问如何用c#实现。

解决方案 »

  1.   

        xml = Regex.Replace(xml, "</([^>]+)>\\s*<([^>]+)>", delegate (Match m) { return m.Groups[1].Value == m.Groups[2].Value ? "" : m.Value; });
      

  2.   

    字符串替换后结果如下<article>
    <中文栏目名_FZ>简讯</中文栏目名_FZ>
    <英文栏目名_FZ>News</英文栏目名_FZ>
    <中文标题_FZ>
    <中文标题_FZ>农业种植</中文标题_FZ>
    </中文标题_FZ>
    <一级标题_FZ>
    <一级标题序号_FZ>0 </一级标题序号_FZ>
    <一级标题_FZ>引言</一级标题_FZ>
    </一级标题_FZ>
    <正文内容_FZ>
    <正文内容_FZ>近年来曝光的食品安全 问题。</正文内容_FZ>
    </正文内容_FZ>
    <参考文献标题_FZ>参考文献</参考文献标题_FZ>
    <文献条目_FZ>
    <编号_FZ>[1]</编号_FZ>
    <文献条目_FZ> 彭建仿.</文献条目_FZ>
    </文献条目_FZ>
    </article>
    合并的结果如下:
    <article>
    <中文栏目名_FZ>简讯</中文栏目名_FZ>
    <英文栏目名_FZ>News</英文栏目名_FZ>
    <中文标题_FZ>
    <中文标题_FZ>农业种植</中文标题_FZ>
    </中文标题_FZ>
    <一级标题_FZ>
    <一级标题序号_FZ>0</一级标题序号_FZ>
    <一级标题_FZ>引言</一级标题_FZ>
    </一级标题_FZ>
    <正文内容_FZ>
    <正文内容_FZ>近年来曝光的食品安全问题。</正文内容_FZ>
    </正文内容_FZ>
    <参考文献标题_FZ>参考文献</参考文献标题_FZ>
    <文献条目_FZ>
    <编号_FZ>[1]</编号_FZ>
    <文献条目_FZ>彭建仿.</文献条目_FZ>
    </文献条目_FZ>
    </article>
      

  3.   

           static void Main(string[] args)
            {
                var s = @"<article>
    <中文栏目名_FZ>简</中文栏目名_FZ>
    <中文栏目名_FZ>讯</中文栏目名_FZ>
    <英文栏目名_FZ>N</英文栏目名_FZ>
    <英文栏目名_FZ>e</英文栏目名_FZ>
    <英文栏目名_FZ>w</英文栏目名_FZ>
    <英文栏目名_FZ>s</英文栏目名_FZ>
    <中文标题_FZ>
    <中文标题_FZ>农</中文标题_FZ>
    <中文标题_FZ>业</中文标题_FZ>
    <中文标题_FZ>种</中文标题_FZ>
    <中文标题_FZ>植</中文标题_FZ>
    </中文标题_FZ>
    <一级标题_FZ>
    <一级标题序号_FZ>0</一级标题序号_FZ>
    <一级标题序号_FZ> </一级标题序号_FZ>
    <一级标题_FZ>引</一级标题_FZ>
    <一级标题_FZ>言</一级标题_FZ>
    </一级标题_FZ>
    <正文内容_FZ>
    <正文内容_FZ>近</正文内容_FZ>
    <正文内容_FZ>年</正文内容_FZ>
    <正文内容_FZ>来</正文内容_FZ>
    <正文内容_FZ>曝</正文内容_FZ>
    <正文内容_FZ>光</正文内容_FZ>
    <正文内容_FZ>的</正文内容_FZ>
    <正文内容_FZ>食</正文内容_FZ>
    <正文内容_FZ>品</正文内容_FZ>
    <正文内容_FZ>安</正文内容_FZ>
    <正文内容_FZ>全</正文内容_FZ>
    <正文内容_FZ> </正文内容_FZ>
    <正文内容_FZ>问</正文内容_FZ>
    <正文内容_FZ>题</正文内容_FZ>
    <正文内容_FZ>。</正文内容_FZ>
    </正文内容_FZ>
    <参考文献标题_FZ>参</参考文献标题_FZ>
    <参考文献标题_FZ>考</参考文献标题_FZ>
    <参考文献标题_FZ>文</参考文献标题_FZ>
    <参考文献标题_FZ>献</参考文献标题_FZ>
    <文献条目_FZ>
    <编号_FZ>[</编号_FZ>
    <编号_FZ>1</编号_FZ>
    <编号_FZ>]</编号_FZ>
    <文献条目_FZ> </文献条目_FZ>
    <文献条目_FZ>彭</文献条目_FZ>
    <文献条目_FZ>建</文献条目_FZ>
    <文献条目_FZ>仿</文献条目_FZ>
    <文献条目_FZ>.</文献条目_FZ>
    </文献条目_FZ>
    </article>";
                var doc = new XmlDocument();
                doc.LoadXml(s);
                var xns = doc.SelectNodes("//*");
                for (var i = 0; i < xns.Count; i++)
                {
                    var xn = xns[i];
                    if (xn.NextSibling != null && xn.NextSibling.Name == xn.Name)
                    {
                        xn.InnerText += xn.NextSibling.InnerText;
                        xn.ParentNode.RemoveChild(xn.NextSibling);
                        i--;
                    }
             }
                Console.WriteLine(doc.OuterXml.Replace("><", ">\n<"));        }
     
      

  4.   

    谢谢,但是这种方式只适合单层级的xml合并。
      

  5.   

    那你就给个多层级的xml
      

  6.   

    非常感谢,的确是可以合并一部分的,但是嵌套的有子节点的xml的合并还是有问题的额。
      

  7.   

    非常感谢,的确是可以合并一部分的,但是嵌套的有子节点的xml的合并还是有问题的额。