如何在Root元素后添加子元素

时间:2013-11-11 11:14:42

标签: c# xml appendchild document-root

我有以下功能,我可以传递我的C#对象,然后将其转换为Xml。

public static XmlDocument SerializeObjectToXML(object obj)
{
  XmlSerializer serializer = 
      new XmlSerializer(obj.GetType());

  using (MemoryStream ms = new MemoryStream())
  {
     XmlDocument xmlDoc = new XmlDocument();
     serializer.Serialize(ms, obj);
     ms.Position = 0;
     xmlDoc.Load(ms);
  }
}

但是,我需要在Root之后添加一个子元素。例如,我现在

<MyObjectResponse>
    <Id>1</Id>
    <Name>Mr Smith</Name>
    <Numbers>
      <Number>100</Number>
      <Number>200</Number>
    </Numbers>
</MyObjectResponse>

但想要输出

<MyObjectResponse>
  <Response>
    <Id>1</Id>
    <Name>Mr Smith</Name>
    <Numbers>
      <Number>100</Number>
      <Number>200</Number>
    </Numbers>
  </Response>
</MyObjectResponse>

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

这样的事情可以解决问题:

XmlDocument xmlDoc = new XmlDocument();
serializer.Serialize(ms, obj);
ms.Position = 0;
xmlDoc.Load(ms);

XmlElement newElem = xmlDoc.CreateElement("Response");

//wrong: works for only 1 child element
//kept for edit/reference
//foreach (XmlNode item in xmlDoc.DocumentElement.ChildNodes)
//{
//    newElem.AppendChild(item);
//}

while (xmlDoc.DocumentElement.ChildNodes.Count != 0)
{
    newElem.AppendChild(xmlDoc.DocumentElement.ChildNodes[0]);
}

xmlDoc.DocumentElement.AppendChild(newElem);

编辑使用foreach循环将while循环替换为正确且通用的实现。