2011-09-21 68 views
0

可能重複:
LINQ to XML Newbie: Moving Nodes From One Node To Another如何將使用Linq的子節點移動到XML?

我這是通過使用的XDocument它由XElements的產生了以下XML,但我有問題,格式化XML方式,我希望它是:

這是我現在有:

<Root> 
<Companies> 
    <Company> 
    <ID>1</ID) 
    <Name>Kalle</Name> 
    <RegNo>1111</RegNo> 
    </Company> 
</Companies> 
<Companies> 
    <Company> 
    <ID>1</ID) 
    <Name>Kalle</Name> 
    <RegNo>1112</RegNo> 
    </Company> 
</Companies> 
</root> 

這就是我想要的東西:

<Root> 
    <Companies> 
     <Company> 
     <ID>1</ID) 
     <Name>Kalle</Name> 
     <RegNo>1111</RegNo> 
     <RegNo>1112</RegNo> 
     </Company> 
    </Companies> 
    </Root> 

我想要做的是所有similiar項/後移動到一個類似的節點。這部分代碼:

XElement xmlTree = new XElement("Root", File.ReadAllLines("C:\\Data.txt") 

     .Select 
     (
      line => 
      { 
       var split = line.DelSplit(); 
       return new XElement("Companies", 
        new XElement("Company", split[0]), 
        new XElement("ID", 
        new XElement("Name", 
        new XElement("RegNo", split[1]) 
      ); 


      } 



     ) 

XDocument Xdoc = new XDocument(xmlTree); 
Xdoc.Save("c:\\Data.xml"); 

這裏是我要合併的原單來源:

<Club> 
    <ID>A</ID> 
    <ContractYears> 
     <ContractYear> 
     <Year>2011</Year> 
     <Owners> 
      <Owner> 
      <OwnerName>Walt Disney</OwnerName> 
      <RegistrationNumber>131313</RegistrationNumber> 
      <Vessels> 
       <Vessel> 
       <VesselName>Alpha</VesselName> 
       <Status>A</Status> 
       <DateAttached></DateAttached> 
       <BrokerName></BrokerName> 
       <Currencies> 
        <Currency> 
        <CurrencyCode></CurrencyCode> 
        <TotalValue></TotalValue> 
        <InterestSplits> 
         <InterestSplit> 
         <Number></Number> 
         <Amount></Amount> 
         </InterestSplit> 
        </InterestSplits> 
        </Currency> 
       </Currencies> 
       </Vessel> 
      </Vessels> 
      </Owner> 
     </Owners> 
     </ContractYear> 
    </ContractYears> 
    </Club> 
    <Club> 
    <ID>A</ID> 
    <ContractYears> 
     <ContractYear> 
     <Year>2011</Year> 
     <Owners> 
      <Owner> 
      <OwnerName>Walt Disney.</OwnerName> 
      <RegistrationNumber>131313</RegistrationNumber> 
      <Vessels> 
       <Vessel> 
       <VesselName>Beta</VesselName> 
       <Status></Status> 
       <DateAttached></DateAttached> 
       <BrokerName></BrokerName> 
       <Currencies> 
        <Currency> 
        <CurrencyCode></CurrencyCode> 
        <TotalValue></TotalValue> 
        <InterestSplits> 
         <InterestSplit> 
         <Number></Number> 
         <Amount></Amount> 
         </InterestSplit> 
        </InterestSplits> 
        </Currency> 
       </Currencies> 
       </Vessel> 
      </Vessels> 
      </Owner> 
     </Owners> 
     </ContractYear> 
    </ContractYears> 
    </Club> 
    <Club> 
+2

你有任何你已經嘗試過的代碼樣本? – thekip

+0

你想包含兩個嵌套在一個元素中的同名的XElement? –

回答

0

那麼,如果你想從你的文本文件中創建正確的XML,你會向我們展示如何文本文件中的數據看起來像。 假設您想操縱現有的XML,您可以通過LINQ分組和LINQ to XML(例如,

  XDocument input = XDocument.Parse(@"<Root> 
<Companies> 
    <Company> 
    <ID>1</ID> 
    <Name>Kalle</Name> 
    <RegNo>1111</RegNo> 
    </Company> 
</Companies> 
<Companies> 
    <Company> 
    <ID>1</ID> 
    <Name>Kalle</Name> 
    <RegNo>1112</RegNo> 
    </Company> 
</Companies> 
</Root> 
"); 
      XDocument output = 
       new XDocument(
        new XElement(input.Root.Name, 
         new XElement("Companies", 
          from comp in input.Root.Elements("Companies").Elements("Company") 
          group comp by (int)comp.Element("ID") into g 
          select new XElement("Company", 
           new XElement("ID", g.Key), 
           g.Elements("Name").First(), 
           g.Elements("RegNo") 
          )))); 

      output.Save(Console.Out); 

輸出

<Root> 
    <Companies> 
    <Company> 
     <ID>1</ID> 
     <Name>Kalle</Name> 
     <RegNo>1111</RegNo> 
     <RegNo>1112</RegNo> 
    </Company> 
    </Companies> 
</Root> 

的LINQ「從..組由成..選擇」當然會,如果你從文本文件中的行讀取時要組數據頗爲相似。

+0

您的解決方案有效,但我在原始數據中有25個字段,我無法正確理解。這並不那麼簡單。 – Fredrico

+0

如果您在向更復雜的數據應用發佈的解決方案時遇到問題,請向我們展示一個示例(您可以編輯您的問題)。但是我們需要看到你想要的輸入和相應的輸出。儘量保持樣本儘量少以證明問題。 –