【问题标题】:Inserting XML to XMLDocument将 XML 插入 XMLDocument
【发布时间】:2015-05-28 21:27:34
【问题描述】:

我的 XML 如下:

 <School>
   <ClassA>
     <Students>
        <Student>
           <Name>AB</Name>
           <Score>90</Score>
        </Student>
     </Students>
   </ClassA>
 </School>

将 XML 加载到 XmlDocument

  XmlDocument xmlRequest = new XmlDocument();
  xmlRequest.LoadXml(myXML);

现在读取 LINQ 中的记录数组并动态创建 XML

  var xmlSubjects = new XElement("subjects",
                    from c in arrySubjects
                    select new XElement("subject",
                         new XElement("English", c.English),  
                         new XElement("Social", c.Social)
                    ));

从上面我得到下面的 XML:

     <Subjects>
        <Subject>
           <English>L Author</English>
           <Social>M Author</Social>
        </Subject>
     </Subjects>

我想将此 XML 添加到我的父 XML 中。我尝试使用以下代码

    XmlNode xElt = xmlRequest.SelectSingleNode("//ClassA");
    XmlElement xNewChild = xmlRequest.CreateElement(xmlSubjects.ToString());
    xmlRequest.DocumentElement.InsertAfter(xNewChild, xElt);  

我需要帮助将我的 XML 字符串添加为 ClassA 的第一个元素。

最终的 XML:

 <School>
   <ClassA>
     <Subjects>
        <Subject>
           <English>L Author</English>
           <Social>M Author</Social>
        </Subject>
     </Subjects>
     <Students>
        <Student>
           <Name>AB</Name>
           <Score>90</Score>
        </Student>
     </Students>
   </ClassA>
 </School>

请帮帮我。

【问题讨论】:

    标签: c# .net linq linq-to-xml


    【解决方案1】:

    我不知道你为什么在这里混用 XmlDocumentXDocument。我会使用XDocument解析原始XML:

    var doc = XDocument.Parse(myXML);
    

    然后您可以找到要插入的元素并添加您的新主题:

    var classA = doc.Descendants("ClassA").First();
    classA.AddFirst(xmlSubjects);
    

    【讨论】:

      【解决方案2】:

      试试这个:

      XmlDocumentFragment xmlfrag = xmlRequest.CreateDocumentFragment();
      xmlfrag.InnerXml = xmlSubjects ;
      xmlRequest.DocumentElement.InsertAfter(xmlfrag,xmlRequest.DocumentElement.FirstChild);
      

      【讨论】:

      • 它工作正常,但我想在 之前的 下插入 xmlSubjects
      • 谢谢它工作正常 :) 我还有一个场景 myxml = 现在我想在 下添加 请在这里给我建议
      【解决方案3】:

      我不建议将XmlDocumentXDocument API 混合在一起,因为生成的代码将难以理解和维护,并且由于两种表示之间的转换还可能存在性能问题。 (也许您被遗留代码限制所束缚?)

      话虽如此,您可以将您的XElement xmlSubjects 流式传输到&lt;ClassA&gt; 元素的XmlNode 表示中,如下所示:

              XmlNode xElt = xmlRequest.SelectSingleNode("//ClassA");
      
              using (var writer = xElt.CreateNavigator().PrependChild())
              using (var reader = xmlSubjects.CreateReader())
              {
                  writer.WriteNode(reader, false);
              }
      

      【讨论】:

        猜你喜欢
        • 2011-04-21
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        • 1970-01-01
        • 2010-09-06
        • 2013-04-28
        • 2010-09-12
        相关资源
        最近更新 更多