Как записать значения XML-элемента верхнего уровня после написания подэлементов

Я ищу здесь совета по умному решению моей проблемы.

Я пишу XML-документ, используя класс XMLWriter, и читаю данные из ADO.NET DataReader только в прямом направлении. В верхней части моего XML-файла мне нужно иметь такие элементы:

<datefrom>2010-07-08</datefrom>
<dateto>2010-07-10</dateto>
<total>335.00</total>

<datefrom> должна быть самой ранней датой, найденной в данных. <dateto> — самая поздняя дата. <total> — это сумма всех <totalpaid>115.00</totalpaid> элементов, перечисленных далее в документе.

Когда я создаю/записываю XML-элементы в файл, я могу отслеживать более ранние/самые последние даты и могу продолжать суммировать все <totalpaid> суммы, чтобы получить итог.

Но...

Когда я достиг конца своего DataReader, как бы вы порекомендовали поместить эти значения в элементы в верхней части XML-файла? Должен ли я помещать токены замены в качестве значений между открывающим и закрывающим тегами (например, @datefrom, @dateto, @total) и как-то их заменять? Это возможно? Должен ли я написать и закрыть файл, снова открыть его и заменить токены фактическими значениями? Есть ли способ заменить токены значениями перед записью XML в файл? Я мало работал с созданием XML-файлов, поэтому не знаю, есть ли какой-то стандартный способ сделать это.

Спасибо!


person jamauss    schedule 28.07.2010    source источник


Ответы (1)


XmlWriter предназначен только для пересылки, поэтому вы не можете вставлять элементы в начале документа. Одна из возможностей — выполнить два SQL-запроса к вашей базе данных. Первый агрегирует данные и возвращает вам три значения, которые вы записываете в начале, затем вы выполняете второй запрос, чтобы записать остальные. Таким образом, агрегирование (минимальное, максимальное, общее) выполняется на уровне базы данных, и вам не нужно вычислять их в своем коде.

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

person Darin Dimitrov    schedule 28.07.2010
comment
Да, на самом деле я шел по пути минимальной, максимальной и общей агрегации в другом запросе, пока не понял, что пользователь может устанавливать/снимать флажки для каждой отображаемой строки. (В основном можно исключить определенные строки из записи в файл xml). Однако мой документ никогда не будет таким большим - его наличие в памяти должно быть приемлемым. Я должен взглянуть на XDocument. - person jamauss; 28.07.2010