XML文件更改属性值而不读取整个文件

时间:2013-10-22 19:35:13

标签: c# xml xml-serialization

我为应用程序开发了自动化应用程序,我在其中读取XML文件执行测试。输入文件非常庞大。输入XML包含属性BatchId。此属性位于根元素本身中。我想在完成测试后将此属性值修改为datetime.now。如果我读完整个文件就会达到性能。因为我正在考虑使用相同的数据进行一些性能测试。

谢谢, 阿努普

2 个答案:

答案 0 :(得分:0)

安全方法是使用XmlReader / XmlWriter复制XML,并在运行时对其进行修改。本文很有帮助:Combining the XmlReader and XmlWriter classes for simple streaming transformations

快速而危险的方法是确保原始XML文档具有占位符时间戳,您可以使用新的时间戳替换它们(它们的大小必须相等)。使用普通的文件流(将文件视为二进制文件)来定位属性的位置(例如,通过将前几百个字节加载到内存中并搜索属性名称)并使用搜索和写入直接在文件中替换它。如果您选择这样做,请非常小心。除非您测试所有内容,否则您未考虑的其他编码或其他更改将为您提供损坏的文件。

答案 1 :(得分:0)

创建一个仅包含根元素及其属性的文件,以及对包含根元素内容的另一个文件的实体引用。然后,您只需要修改小包装器文件。为此,您需要使用不扩展实体引用的XML解析器,或者(在这种情况下可能更简单)非XML方法。