如何将新XML元素添加到现有NodeList?

时间:2011-05-21 11:37:39

标签: xml xmldocument

假设我有

<Start>  
  <abc>
  ...
  ..
  </abc>
  <qqq id = 1>
  ...
  ...
  ...
  </qqq>
  <qqq id = 2>
  ...
  ...
  ...
  </qqq>
</Start>

是否可以在这种XML中创建新元素,以便将所有<qqq>作为子节点?

即,最终的XML应如下所示:

<Start>
   <abc>
   ...
   ...
   </abc>
   <Begin name = myname>
      <qqq id = 1>
      ...
      ...
      ...
      </qqq>
      <qqq id = 2>
      ...
      ...
      ...
      </qqq>
   </Begin>
</Start>

1 个答案:

答案 0 :(得分:1)

假设你正在使用C#而你想使用XmlDocument,你可以这样做:

var doc = new XmlDocument();
doc.LoadXml(xml);

var root = doc.DocumentElement;

var begin = doc.CreateElement("Begin");
var beginAttribute = doc.CreateAttribute("name");
beginAttribute.Value = "myname";
begin.Attributes.Append(beginAttribute);

var qqqs = root.GetElementsByTagName("qqq").Cast<XmlNode>().ToArray();

foreach (XmlNode qqq in qqqs)
{
    root.RemoveChild(qqq);
    begin.AppendChild(qqq);
}

root.AppendChild(begin);

但使用XDocument要容易得多:

var doc = XDocument.Parse(xml);

var qqqs = doc.Root.Elements("qqq");

var begin = new XElement("Begin", new XAttribute("name", "myname"), qqqs);

qqqs.Remove();

doc.Root.Add(begin);