使用Linq To Xml插入XElement以包围其他XElement

时间:2009-06-02 06:37:03

标签: c# linq-to-xml

我们说我有以下xml,

<Where><BeginsWith>...</BeginsWith></Where>

现在我想“插入”围绕BeginsWith子句的<And>子句,以便之后看起来像这样,

<Where><And><BeginsWith>...</BeginsWith></And></Where>

如何使用LinqToXml实现这一目标?

我基本上做的Add方法 where.Add(new XElement("And")) 只会在BeginsWith之后添加“And”,就像这样,

<Where><BeginsWith>...</BeginsWith><And /></Where>

2 个答案:

答案 0 :(得分:6)

  • 获取BeginsWith元素
  • 在其上调用XNode.Remove()将其从Where
  • 中删除
  • 添加And元素
  • 将BeginsWith添加到And元素(或使用它作为内容开始创建And元素)

例如:

using System;
using System.Xml.Linq;

public class Test
{
    public static void Main()
    {
        XElement where = XElement.Parse
            ("<Where><BeginsWith>...</BeginsWith></Where>");
        XElement beginsWith = where.Element("BeginsWith");
        beginsWith.Remove();
        where.Add(new XElement("And", beginsWith));
        Console.WriteLine(where);
    }        
}

答案 1 :(得分:1)

我不知道有任何原子操作会为你做这件事。您可能需要添加“And”元素,然后在其中移动BeginsWith元素。