2013-08-27 2 views
0

Как мы строим XML, получая значения из двух XmlNodeList,Построить новый XML из двух XmlNodeList

Ex ---> 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 like ->

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

Это просто пример. Ответьте на ответ. Thanks

ответ

0

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

 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>