【问题标题】:How to write top-level XML element values after writing sub elements编写子元素后如何编写顶级 XML 元素值
【发布时间】:2010-07-28 15:26:35
【问题描述】:

我正在这里寻求有关我的问题的智能解决方案的建议。

我正在使用 XMLWriter 类编写 XML 文档,并以只进的方式从 ADO.NET DataReader 中读取数据。在我的 XML 文件的顶部,我需要有这样的元素:

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

&lt;datefrom&gt; 需要是数据中找到的最早日期。 &lt;dateto&gt; 是最新日期。 &lt;total&gt; 是文档后面列出的所有 &lt;totalpaid&gt;115.00&lt;/totalpaid&gt; 元素的总和。

当我创建 XML 元素/将 XML 元素写入文件时,我可以跟踪更早/最新的日期,并且可以继续将所有 &lt;totalpaid&gt; 金额相加得到一个总数。

但是……

一旦我到达我的 DataReader 的末尾,您会如何建议将这些值放入 XML 文件顶部的元素中?我应该将替换标记作为开始和结束标记(即@datefrom、@dateto、@total)之间的值并以某种方式替换它们吗?那可能吗?我应该写入并关闭文件,重新打开它并用实际值替换标记吗?在将 XML 写入文件之前,有没有办法用值替换标记?我在生成 XML 文件方面工作不多,所以我不知道是否有一些标准的方法可以做到这一点。

谢谢!

【问题讨论】:

    标签: xml xmlwriter


    【解决方案1】:

    XmlWriter 是只进的,所以你不能在文档的开头插入元素。一种可能性是对您的数据库执行两个 SQL 查询。第一个将聚合数据并返回您在开始时编写的三个值,然后您执行第二个查询以编写其余部分。这样聚合(最小值、最大值、总计)在数据库级别完成,您无需在代码中计算它们。

    如果你不能这样做,你可以使用XDocument,它允许你在任何地方插入节点,但它会将整个文档放在内存中,如果文档很大,这可能是不可接受的。

    【讨论】:

    • 是的,我实际上在另一个查询中沿着 min、max、total 聚合的路径前进,直到我意识到用户可以选中/取消选中显示的每一行的复选框。 (基本上能够省略某些行被写入 xml 文件)。我的文档永远不会那么大 - 将它放在内存中应该是可以接受的。我得看看 XDocument。
    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 2019-10-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多