2015-05-28 4 views
0

Мой XML выглядит следующим образом:Вставка XML в XMLDocument

<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.

Final 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> 

Пожалуйста, помогите мне в этом.

ответ

0

Попробуйте это:

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

Он отлично работает, но я хочу, чтобы вставить xmlSubjects под перед тем user1893874

+0

@ user1893874 Не могли бы вы проверить сейчас .. –

+0

Спасибо вам, что это работает отлично :) У меня есть еще один сценарий, где myxml = Теперь я хочу, чтобы добавить Под Пожалуйста, предложите мне здесь – user1893874

1

Я не уверен, почему вы смешиваете XmlDocument и XDocument здесь. Я хотел бы разобрать исходный XML с помощью XDocument:

var doc = XDocument.Parse(myXML); 

И тогда вы можете найти элемент для вставки в и добавлять свои новые предметы:

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

Я бы не рекомендовал смешивания API, XmlDocument и XDocument вместе, потому что полученный код будет трудно понять и поддерживать, а также потенциально иметь проблемы с производительностью из-за конверсий между двумя представлениями. (Возможно, вы зажаты в ограничениях унаследованного кода?)

При этом, вы можете передавать ваши XElement xmlSubjects в XmlNode представления <ClassA> элемента следующим образом:

 XmlNode xElt = xmlRequest.SelectSingleNode("//ClassA"); 

     using (var writer = xElt.CreateNavigator().PrependChild()) 
     using (var reader = xmlSubjects.CreateReader()) 
     { 
      writer.WriteNode(reader, false); 
     }