2012-01-29 2 views
2

У меня есть большой XML-документ, который должен быть загружен большими, используя XmlDocument. мне нужно пройти через каждый дочерний узел узла и проверить его условие, а затем удалить его, а затем, наконец, сохранить документ.Удаление узлов из больших файлов XML

<root> 
<node id="1"> 
<child delete="false"/> 
</node> 
<node id="2"> 
<child delete="true"/> 
</node> 
</root> 

например, я хотел бы удалить узел 2, и этот процесс должен повторяться сотни раз.

любая помощь будет оценена. спасибо.

Редактировать Может кто-нибудь объяснить, как я могу это сделать.

+1

Сотни раз не много. Независимо - каков ваш вопрос? Обращение за помощью не говорит нам, с чем вы столкнулись. – Oded

+0

Каково ваше состояние? не можете ли вы использовать запрос linqxml для извлечения элементов для удаления? – DotNetUser

ответ

5

Вы можете использовать XmlReader для последовательного чтения вашего xml (ReadOuterXml может быть полезно в вашем случае для чтения всего узла за раз). Затем используйте XmlWriter, чтобы выписать все узлы, которые вы хотите сохранить.

+0

XmlReader для меня тоже, сохраняет чтение большого файла в память в одном куске. –

0

Note, непроверенная и я не использовал XDocument/XElements на некоторое время, так что может Опечатка здесь

XDocument xdoc = XDocument.Load("path\\to\\file.xml"); 
IEnumerable<XElement> elementsToDelete = xdoc.Descendants("node") 
    .Where(node => node.Descendants("child") 
     .Where(child => child.Attribute("delete") != null && 
     child.Attribute("delete").Value.ToLower() == "true")); 
foreach(XElement element in elementsToDelete) 
    element.Remove(); 

xdoc.Save("path\\to\\new\\file.xml"); 
+0

Но реальный файл.xml «слишком большой для загрузки с использованием XmlDocument» –

+0

@HenkHolterman ooh, пропустил эту часть. Это загрузит весь файл в память, поэтому, вероятно, не то, что хочет OP. –

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