C#處理XML大檔案遇到的多重宣告問題(這不是預期的 XML 宣告)_記憶體不足處理_未預期的結束標記
首先在一開始遇到的主要是有多個宣告出現在同一篇XML檔案中 由於遇到的需求是要我去解析匯入一個XML大檔案(平均超過700MB以上) 包含多份專利檔案 在一開始遇到的Exception 錯誤就是 這不是預期的 XML 宣告。XML 宣告必須在文件的第一個節點,且不允許在其前方出現空白字元。 通常一份XML只能有一個 <?xml version="1.0" encoding="UTF-8"?> 的宣告 有重複多個是不合法的XML格式 How to load XML File Source with multiple XML Declaration https://answers.sap.com/questions/12229327/how-to-load-xml-file-source-with-multiple-xml-decl.html 因此一開始想到的策略就是一開始 不要直接先用XML API Load(string xml_path)進來(傳入的參數為一XML檔案路徑) 改先將重複宣告的這一句 <?xml version="1.0" encoding="UTF-8"?> 給取代掉 統一只在最一開始加上這一句宣告就好 結果 由於大檔案關係一次取代會導致記憶體不足 遇到的第二個例外錯誤 System.OutOfMemoryException 這裡已經測試過直接一口氣Load到記憶體存的 例如MemoryStream XML API Load 跟 LoadXml都是不可行的 只能改成一行一行讀取的方式(不要一次讀進內存) 因此未來必須捨棄掉對XmlDocument 仰賴XPATH 相關API (SelectNodes,SelectSingleNode)作法 .NET XML API 中 XmlTextReader 、 XmlReader (XmlTextReader 的抽象Base Class)雖能夠一行一行讀取 使記憶體不足問題得以克服但又會遭遇到 這不是預期的 XML 宣告。XML 宣告必須在文件的第一個節點,且不允許在其前方出現空白字元。 當讀取到重複宣告的該行就又會報此錯 我希望當滾while一行一行讀取時候當出現此例外就continue來忽略 直接做