2013-08-27 53 views
0

建立一個新的XML我們如何建立一個XML通過從兩個XmlNodeList中獲取值,從兩個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> 

這裏將xmlnodelist1中的「d」值與xmlnodelist2中的「e」值進行比較,並獲得「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> 

這只是一個例子。請回答一個答案。 謝謝

回答

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>