C# 如何将节点放入父节点?

C# 如何将节点放入父节点?,c#,xml,xmldocument,C#,Xml,Xmldocument,我想添加一个具有属性的父节点,并将节点放在此父节点内。我有以下xml: <?xml version="1.0" encoding="UTF-8"?> <foo> <row> <PHONE_NUM>124</PHONE_NUM> <PHONE_ORDER>1</PHONE_ORDER> </row> <row> <PHO

我想添加一个具有属性的父节点,并将节点放在此父节点内。我有以下xml:

<?xml version="1.0" encoding="UTF-8"?>
<foo>
   <row>
      <PHONE_NUM>124</PHONE_NUM>
      <PHONE_ORDER>1</PHONE_ORDER>      
   </row>
   <row>
      <PHONE_NUM>123</PHONE_NUM>
      <PHONE_ORDER>2</PHONE_ORDER>      
   </row>
   <row>
      <PHONE_NUM>181</PHONE_NUM>
      <PHONE_ORDER>3</PHONE_ORDER>      
   </row>   
</foo>
我努力实现的目标是:

<?xml version=""1.0"" encoding=""UTF-8""?>
<foo>
    <books id=""1"">
       <row>
          <PHONE_NUM>124</PHONE_NUM>
          <PHONE_ORDER>1</PHONE_ORDER>      
       </row>
       <row>
          <PHONE_NUM>123</PHONE_NUM>
          <PHONE_ORDER>2</PHONE_ORDER>      
       </row>
       <row>
          <PHONE_NUM>181</PHONE_NUM>
          <PHONE_ORDER>3</PHONE_ORDER>      
       </row>  
    </books>
</foo>

如果可能的话,最好使用XmlDocument类。如果您有任何帮助,我们将不胜感激。

以下是您想使用XDocument类做的事情。只需创建新节点并使用您的规范修改现有节点:

var report = XDocument.Parse(xmlString);
report.Root.Name = XName.Get("books", report.Root.Name.NamespaceName);
report.Root.Add(new XAttribute("id", 1));
var newDoc = new XDocument();
var newRoot = new XElement("foo");
newRoot.Add(report.Root);
newDoc.Add(newRoot);

下面是关于使用XDocument类要执行的操作。只需创建新节点并使用您的规范修改现有节点:

var report = XDocument.Parse(xmlString);
report.Root.Name = XName.Get("books", report.Root.Name.NamespaceName);
report.Root.Add(new XAttribute("id", 1));
var newDoc = new XDocument();
var newRoot = new XElement("foo");
newRoot.Add(report.Root);
newDoc.Add(newRoot);

此过程帮助您创建一个新的子节点并移动此新子节点下的所有节点

首先创建一个新元素。。 移动此新元素下的所有节点 在XML中需要的地方添加新元素。 输出


此过程帮助您创建一个新的子节点并移动此新子节点下的所有节点

首先创建一个新元素。。 移动此新元素下的所有节点 在XML中需要的地方添加新元素。 输出

var report = XDocument.Parse(xmlString);
report.Root.Name = XName.Get("books", report.Root.Name.NamespaceName);
report.Root.Add(new XAttribute("id", 1));
var newDoc = new XDocument();
var newRoot = new XElement("foo");
newRoot.Add(report.Root);
newDoc.Add(newRoot);
XmlDocument doc2 = new XmlDocument();
doc2.LoadXml(xmlString);

var newElement = doc2.CreateElement("body");
newElement.SetAttribute("id", "1");

var moveNodes = doc2.DocumentElement.SelectNodes("//row");
foreach(XmlNode node in moveNodes)
    newElement.AppendChild(node);

doc2.GetElementsByTagName("foo")[0].AppendChild(newElement);
<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <body id="1">
        <row>
            <PHONE_NUM>124</PHONE_NUM>
            <PHONE_ORDER>1</PHONE_ORDER>
        </row>
        <row>
            <PHONE_NUM>123</PHONE_NUM>
            <PHONE_ORDER>2</PHONE_ORDER>
        </row>
        <row>
            <PHONE_NUM>181</PHONE_NUM>
            <PHONE_ORDER>3</PHONE_ORDER>
        </row>
    </body>
</foo>