2012-09-02 81 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> 
相关问题