【问题标题】:How to put nodes into parent node?如何将节点放入父节点?
【发布时间】:2020-05-31 14:32:17
【问题描述】:

我想添加一个带有属性的父节点并将节点放在这个父节点内。我有以下 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>

我试过这种方法:

var xmlString = @"<?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>";

var report = XDocument.Parse(xmlString);
var newdoc = new XDocument();
newdoc.Add(new XElement("testsuites")); 
newdoc.Root.Add(report.Root);

但是上面的代码生成的是没有id,并且命令books已经变成了一个根:

<books>
  <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>
  </books>

我想要实现的是:

<?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 类。任何帮助将不胜感激。

【问题讨论】:

    标签: c# xml xmldocument


    【解决方案1】:

    此过程可帮助您创建一个新子节点并将所有节点移动到该新子节点下。

    1. 先创建一个新元素..
    2. 移动这个新元素下的所有节点
    3. 在 XML 中您需要的位置添加新元素。
    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>
    

    【讨论】:

      【解决方案2】:

      这里是关于你想要做什么,使用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);
      

      【讨论】:

        猜你喜欢
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        相关资源
        最近更新 更多