Создайте новый XML из двух xmlnodelist

Как мы создаем xml, получая значения из двух xmlnodelist,

Пример ---> Xmlnodelist1:

<D>
  <F a="1" b="2" c="3">
     <B d="4" e="5" f="6" g="7"/>
     <B d="5" e="5" f="11" g="7"/>
     <B d="6" e="5" f="23" g="8"/>
     <B d="7" e="5" f="45" g="9"/>
   </F>
</D>  

Xmlnodelist2:

<Z aa="1">
       <s e="4" ee="5" ae="6"/>
       <s e="5" ee="55" ae="6"/>
       <s e="6" ee="555" ae="6"/>
       <s e="7" ee="5555" ae="6"/>
    </Z>

Здесь сравните значение «d» в xmlnodelist1 со значением «e» в xmlnodelist2 и получите значения «g», «f» и «ae» и создайте xml, например ->

 <Root>
         <T g="7" f="45" ar="6">
         <T g="7" f="45" ar="6">
         <T g="7" f="45" ar="6">
         <T g="7" f="45" ar="6">
    </Root> 

Это всего лишь пример. Пожалуйста, ответьте ответом. Спасибо


person user2711884    schedule 27.08.2013    source источник


Ответы (1)


Вы можете использовать Linq to Xml. Пример ниже не дает точного результата вашего примера, потому что я не совсем понимаю связь между двумя списками, но это начало:

        XElement xml1 =
            XElement.Parse("<D>" +
                            "  <F a=\"1\" b=\"2\" c=\"3\">" +
                            "     <B d=\"4\" e=\"5\" f=\"6\" g=\"7\"/>" +
                            "     <B d=\"5\" e=\"5\" f=\"11\" g=\"7\"/>" +
                            "     <B d=\"6\" e=\"5\" f=\"23\" g=\"8\"/>" +
                            "     <B d=\"7\" e=\"5\" f=\"45\" g=\"9\"/>" +
                            "  </F>" +
                            "</D>");

        XElement xml2 =
            XElement.Parse("<Z aa=\"1\">" +
                            "  <s e=\"4\" ee=\"5\" ae=\"6\"/>" +
                            "  <s e=\"5\" ee=\"55\" ae=\"6\"/>" +
                            "  <s e=\"6\" ee=\"555\" ae=\"6\"/>" +
                            "  <s e=\"7\" ee=\"5555\" ae=\"6\"/>" +
                            "</Z>");
        // I join list1 and list2 with attribute d and e
        IEnumerable<XElement> result = from list1 in xml1.Descendants("B")
                                       join list2 in xml2.Descendants("s")
                                       on list1.Attribute("d").Value equals list2.Attribute("e").Value
                                       select new XElement("T", new XAttribute("g", list1.Attribute("g").Value),
                                           new XAttribute("f", list1.Attribute("f").Value),
                                           new XAttribute("ar", list2.Attribute("ae").Value));
        var test = new XElement("Root", result);

И результат:

<Root>
  <T g="7" f="6" ar="6" />
  <T g="7" f="11" ar="6" />
  <T g="8" f="23" ar="6" />
  <T g="9" f="45" ar="6" />
</Root>
person Brice2Paris    schedule 03.09.2013