2015-04-28 3 views
0

Я пишу инструмент для ввода некоторых узлов xml в существующий xml-файл на моей машине. Однако, поскольку файл составляет около 30 МБ, XDocument.Load (путь) берет навсегда.Обновление большого xml-файла в C#

, например,

<a> 
    <b> 
    <c>123</c> 
    </b> 
</a> 

является частью большого XML-файла.

Я хотел бы добавить узел XML под тегом «б», как

<a> 
    <b> 
    <c>123</c> 
    <d>456</d> 
    </b> 
</a> 

Файл находится в локальной папке, и я хочу, чтобы обновить существующий файл.

Что было бы лучшим способом обновить большой файл xml без полной загрузки?

Спасибо.

ответ

0

Вы не можете легко редактировать xml на месте; ну, вы, , можете использовать, но при этом потребуется вычислять размер закодированного байта, расширять файл и копировать все данные после точки вставки на n байтов (стараясь не перезаписывать данные, которые вы еще не читали) и перезаписи данных в точке ввода.

Как правило, вы можете использовать пару XmlReader/XmlWriter, чтение и запись элемента за элементом, за исключением точки ввода, где вы пишете дополнительный элемент.

Ни один вариант тривиально.

Вы можете попробовать с помощью XmlSerializer вместо XDocument - более простую модель объекта (т.е. модель ПОКО) может быть проще и эффективнее для загрузки; однако, просто: xml не является хорошим форматом, если вы хотите часто вносить изменения.

Еще один вариант, который вы могли бы рассмотреть: XSLT (или, возможно, SAX); то подметание модели становится работой API, и вам просто нужно беспокоиться о добавлении шаблона для ваших изменений. XSLT - это не инструмент, который все знают, но это будет лот проще попробовать, чем XmlReader (базовое преобразование может быть составлено из образцов за несколько минут).

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