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

Мне нужен совет по разумному решению моей проблемы.

Я пишу 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-файлов, поэтому не знаю, есть ли какой-нибудь стандартный способ сделать это.

Спасибо!

1 Ответ

0 голосов
/ 28 июля 2010

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

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

...