2012-09-02 77 views
0

有例如標籤的LINQ to XML,迫使現有標籤之間關閉和打開的標籤

<book> 
<firstHalf> </firstHalf> 

<secondHalf> </second half> 
</book> 

我的要求是,我需要firsthalf seprate和下半年這種低於

<book> 
<firstHalf> </firstHalf> 
</book> 
<book> 
<secondHalf> </second half> 
</book> 

所以首先,我需要添加一個新的閉幕書標籤,然後打開書標籤!使用LINQ

我不知道如何做到這一點,任何幫助將不勝感激。

+0

它不是一個有效的XML..'second half'應該是'secondHalf' – Anirudha

回答

0
var xmlStr = @"<root> 
    <book> 
     <firstHalf></firstHalf> 
     <secondHalf></secondHalf> 
    </book> 
</root> 
"; 
var doc = XDocument.Parse(xmlStr); 

// find all books 
var books = doc.Descendants("book").ToList(); 
    // p.s., need ToList() since we're modifying the structure 
foreach (var book in books) 
{ 
    // get all the "extra" elements 
    var extraElements = book.Elements().Skip(1).ToList(); 
    if (extraElements.Any()) 
    { 
     // remove the extra elements from the current book 
     extraElements.Remove(); 
     // create new books after this book with the extra element 
     book.AddAfterSelf(extraElements.Select(e => new XElement("book", e))); 
    } 
} 

產量:

<root> 
    <book> 
    <firstHalf></firstHalf> 
    </book> 
    <book> 
    <secondHalf></secondHalf> 
    </book> 
</root> 
相關問題