2016-06-21 3 views
0

У меня есть xml, как показано ниже. Я хочу удалить n-й узел продукта из этого xml.Удалить nth xelement из xdocument C#

Я пробовал это, но не работал.

document.Descendants("products").Descendants("product").Take(1) 

XML

<products> 
    <product> 
     <territory>A</territory> 
    </product> 
    <product> 
     <territory>B</territory> 
    </product> 
    <product> 
     <territory>C</territory> 
    </product> 
    <product> 
     <territory>D</territory> 
    </product> 
    <product> 
     <territory>E</territory> 
    </product> 
</products> 

Как удалить 3-й узел продукта из этого XML?

ответ

1

Я предлагаю использовать Linq к Xml. Вы можете использовать ElementAt и найти элемент в заданном положении, можно было бы вызвать Remove на элемент find, чтобы удалить элемент.

int position = 3; // Specify position. 
    XElement element = XElement.Parse(input); 

    element          
     .Elements("product") 
     .ElementAt(3) 
     .Remove(); 

Ouput

<products> 
    <product> 
    <territory>A</territory> 
    </product> 
    <product> 
    <territory>B</territory> 
    </product> 
    <product> 
    <territory>C</territory> 
    </product> 
    <product> 
    <territory>E</territory> 
    </product> 
</products> 

Проверить это Demo

+0

спасибо, Хари. Предположим, я хочу удалить все элементы внутри второго узла продукта, но не удалить узел продукта, а затем, как его реализовать? –

+0

Вы можете просто искать '.Elements.Remove()', он удаляет элементы не родительский узел. –

1

Вы не можете получить доступ к дочерним узлам с помощью индекса. Один из способов будет:

document.Descendants("products").Descendants("product").Skip(2).Take(1);