2015-03-17 6 views
1

У меня есть XDocument, что я хочу, чтобы удалить весь узел Allocation, когда значение узла Account = TESTXElement удалить родительский узел

<Order> 
    <Quantity>800</Quantity> 
    <Allocations> 
    <Allocation> 
     <Account>ACCT1</Account> 
     <Quantity>100</Quantity> 
    </Allocation> 
    <Allocation> 
     <Account>TEST</Account> 
     <Quantity>300</Quantity> 
    </Allocation> 
    <Allocation> 
     <Account>ACCT4</Account> 
     <Quantity>400</Quantity> 
    </Allocation> 
</<Allocations> 
</Order> 

And my code: 

XElement root = XElement.Parse(util.DocAsString(xmlDoc)); 
IEnumerable<string> acctList = from acct in root.Descendants("Account") 
              select (string)acct; 
foreach (var acct in acctList) 
{ 
    root.Elements("Allocation").Where(aa => aa.Element("Account").Value == "TEST").Remove(); 
} 

Однако это не вынимая узел. Пожалуйста, помогите, спасибо.

ответ

0

В настоящее время выражение внутри вашего цикла foreach не удаляет ничего, потому что часть до Remove() не возвращает какой-либо элемент. И это потому, что <Allocation> не является прямым дочерним элементом корневого элемента (вы можете использовать Descendants() вместо Elements(), чтобы исправить это).

В конце концов, вы даже не нужно, что foreach петля на всех:

XElement root = XElement.Parse(util.DocAsString(xmlDoc)); 

root.Descendants("Allocation") 
    .Where(aa => aa.Element("Account").Value == "TEST") 
    .Remove(); 

Чтобы сохранить изменения обратно в файл XML (если вы на самом деле читать их из файла), не забудьте сохранить изменен XElement вернуться к исходному файлу.

Смежные вопросы