2012-06-19 3 views
0

Я пробовал смотреть здесь, но не смог найти правильный ответ. У меня есть XML-строка, в которой есть куча узлов.
Я хочу извлечь только пару узлов из этой строки и добавить ее с помощью нового корневого элемента и вернуть его.XML-строка - выберите только определенные узлы

Я знаю, как это сделать, загрузив это на XMLDocument и выбрав узлы. Есть ли лучший способ сделать это с помощью XpathNavigator или XmlReader?

Это моя строка

<root> 
    <node1/> 
    <node2/> 
    <node3/> 
    <node4/> 
    <node5> 
</root> 

Я хочу, чтобы моя строка вывода будет

<root> 
    <node3/> 
    <node4/> 
</root> 

должна быть сделан эффективным образом.

+0

Итак, вы хотите удалить узлы 1, 3 и 5? – user845279

+0

да, но на самом деле мне, возможно, придется удалить больше узлов. Я предполагаю, что я хочу сказать, что может быть больше, чем всего 5 узлов, из которых мне нужно только 2. Также мой ввод - строка (я знаю, что упоминал об этом в своем сообщении, просто подчеркивая) –

+0

Вы считали XSLT? – CSharpenter

ответ

0

Для простоты я бы использовал XDocument.Parse(). И манипулируйте DOM через предоставленные функции. Поскольку XML предоставляется в виде строки, возможно, небольшой, я готов поспорить, что вы не увидите проблем сложности.

Если есть много узлов для удаления, я предлагаю вам использовать список строк XPath. Затем для каждой строки вы можете использовать doc.XPathSelectElements(), чтобы найти все элементы и вызвать remove() на каждом из них. Полученный XDocument будет иметь только оставшиеся узлы.

+0

спасибо за ответ. однако, хотя я получаю часть XDocument, какой метод (ы) использовать для достижения того, что я хочу? –

+0

это то, что я пробовал, но он удаляет все, кроме корневого XDocument x = XDocument.Parse (xmlstring); x.Root.Elements(). Где (e => e.Name! = "Node3" || e.Name! = "Node4"). Remove(); –

+0

Попробуйте '&&' вместо '||'. – user845279