2013-10-22 63 views
0

我已經爲讀取XML文件執行測試的應用程序開發了自動化應用程序。輸入文件真的很大。輸入XML包含一個屬性BatchId。該屬性在根元素本身中。我想在完成測試後將此屬性值修改爲datetime.now。如果我讀完整個文件,它會打到表演。因爲我正在考慮使用相同數據進行一些性能測試。在不讀取整個文件的情況下XML文件更改屬性值

感謝, 阿努普

+0

您是否考慮過保留一個單獨的文件,其中包含上次訪問該文件的名稱和日期時間。如果您更改了XML文件屬性,則必須在屬性值中使用原來相同數量的字符,否則會損壞您的XML。 – Dweeberly

+0

由於自動化處於開發階段,目前我正在手動更改屬性值。我可以使用相同數量的字符沒有問題,我的最大限制是38個字符。我很好,使用任何小於38位數字的唯一號碼。 DateTime只是一種獲得唯一性的方法,還有其他簡單和更好的方法? – Anup

回答

0

的安全的方法是使用的XmlReader/XmlWriter的複製XML,修改它的飛行。本文有幫助:Combining the XmlReader and XmlWriter classes for simple streaming transformations

快速而危險的方法是確保原始XML文檔具有佔位符時間戳,您可以用新時間戳替換它們(它們的大小必須相同)。使用普通的文件流(將文件視爲二進制文件)來定位屬性的位置(比如,通過將前幾百個字節加載到內存中並搜索屬性名稱),並使用seek和write直接替換文件中的文件。如果您選擇這樣做,請小心。除非您測試了所有內容,否則您不考慮的不同編碼或其他更改會導致文件損壞。

+0

謝謝Dag,我首先想用安全的方法嘗試。我創建了XMLReader XMLWriter並將輸入文件提供給兩者。我不想創建另一個文件。當我嘗試讀取和寫入同時拋出,除了該文件正在被另一個進程使用。 – Anup

+0

我可以使用XDocument而不是XMLReader XMLWriter。哪一個會更快,消耗更少的內存? – Anup

+0

您必須讀寫不同的文件。如果文件沒有被鎖定,你可能會(理論上)最終覆蓋你正在閱讀的數據。 XmlDocument和XDocument都會將整個文檔讀入內存。讀寫器類將會更快。 – EventHorizon

0

創建一個僅包含根元素及其屬性的文件,以及另一個包含根元素內容的文件的實體引用。然後你只需要修改小包裝文件。爲此,您將需要使用不擴展實體引用的XML解析器,或者(在這種情況下可能更簡單)使用非XML方法。

相關問題