發表文章

目前顯示的是有「XML」標籤的文章

C#中處理保留特定XML tag的函數設計

圖片
  在一段XML內文中倘若我們有需要保留特定幾個Tag 比如下列這一段 1 2 3 4 5 6 7 <?xml version="1.0" encoding="UTF-8"?> <note> <to> Tove </to> <from> Jani </from> <heading> Reminder </heading> <body> Don't forget me this weekend! <sub> 3 </sub> test </body> </note> 假設今天我想保留擷取的XML內文中也要包含sub tag則 此時我們不能直接透過 .InnerText來擷取 因為只會取的到純文字內文 這時可以藉由.InnerXML傳入後 將目標要保留的tag關鍵字改用全形進行替換之後再自行串根結點(避免多重根結點違反XML規則的突發狀況)間接再去取XML 純文字內文即可將該sub tag保留 如下code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 static string GetKeepSpecificXmlTagStr ( string XmlContent) { XmlContent = System.Text.RegularExpressions.Regex.Replace(XmlContent, "<sub>" , "<sub>" , System.Text.RegularExpressions.RegexOptions.IgnoreCase); XmlContent = System.Text.RegularExpressions.Regex.Replace(XmlContent, "<sub" , "<sub" , ...

C#_XML_在根層次的資料無效。 行1,位置1

圖片
  若在透過LoadXML   api 傳入自己手動兜的一串XML字串 請記得再最後先做一下Trim處理再給LoadXml讀取即可避免遇到此錯誤。 其他XML處理經驗 C#處理XML大檔案遇到的多重宣告問題(這不是預期的 XML 宣告)_記憶體不足處理_未預期的結束標記 https://coolmandiary.blogspot.com/2021/04/cxml-xml.html C#中XML的Parser處理_load跟loadXML_The entity "xxx" was referenced, but not declared(參考了未宣告的實體xxx) https://coolmandiary.blogspot.com/2020/12/cxmlparserloadloadxmlthe-entity-xxx-was.html XML(Extensible Markup Language)可擴展標籤語言筆記_醫療費用採XML格式申報生活實例 https://coolmandiary.blogspot.com/2019/04/xmlextensible-markup-languagexml.html Ref: 又要吐槽一下:xml 根级别上的数据无效。 行 1,位置 1 XML解析异常:根级别上的数据无效。 第 1 行 位置 1 根级别上的数据无效 行1 位置1 问题解决参考

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來忽略 直接做...

C#中XML的Parser處理_load跟loadXML_The entity "xxx" was referenced, but not declared(參考了未宣告的實體xxx)

圖片
最近由於在協助院內一項parser 專利XML檔案任務  也因此有機會累積對XML檔案的相關處理經驗 通常在C#進行XML的讀取與Parser 有兩種方法 XmlDocument.Load 方法 該方法的overload Load(Stream) 從指定的資料流載入 XML 文件。 Load(TextReader) 從指定的 TextReader 載入 XML 文件。 Load(String) 從指定的 URL 載入 XML 文件。 Load(XmlReader) 從指定的 XmlReader 載入 XML 文件。 那通常比較容易直接就寫string 傳入xml 檔案路徑 1 2 XmlDocument XmlDoc = new XmlDocument(); XmlDoc.Load( @"C:\xml_dir\aaa.xml" ); 直到有一天突然跑出詭異的錯誤 參考了未宣告的實體 ’Lstrok’ 後來才得知原來 該XML檔案裏頭竟然藏著一個&字符 所以用第二種方式讀取(參考網路其他人解法) XmlDocument.LoadXml(String) 方法 在讀入後先做&的取代 1 2 3 XmlDocument XmlDoc = new XmlDocument(); string XmlContent = File.ReadAllText( @"C:\xml_dir\aaa.xml" ); XmlDoc.LoadXml(XmlContent.Replace( "&" , "&amp;" )); 然後就又挫屎了~(以後如果看到有人用上面那兩種方式定義,可以先釐清 該XML是如何生成的還有當中內容格式會不會有怪異特殊字符) 因為實際上 有些在XML中有用到如下實體(這是預設XML就會懂得基本entity) &lt;     <     小餘 &gt;     >     大餘 &amp;    &     和號 &apos;   '    ...

XML(Extensible Markup Language)可擴展標籤語言筆記_醫療費用採XML格式申報生活實例

圖片
XML簡介: 可擴展標記語言與HTML最大差異就在於標籤是可以被擴充的 而HTML注重於網頁外觀,XML則是注重於資料的結構用在交換剖析。 是由一連串dataset和tag所構成的。 XML比較常用於資料交換,於開發過程中 對於不同作業系統之間的資料傳送,通常都會使用XML技術 (比方Web Service....) 捨麼是XML Extensible Markup Language 主要是SGML子集合,目標在於允許普通SGML在Web上以目前HTML方式來進行資料處裡之應用,因而使其更加利於設計。 並且可以在SGML與HTML之間相互操作(W3C XML工作團隊對其定義) GML(Generalized Markup Language) 1969年由IBM提出,最早是由William W. Tunnicliffe 於1960年代提出 結構化標籤語言的概念 在當時所遇到的問題就是對於不同種類文件(比如:信、文章、書籍、.....等等) 則需要不同的標籤語言 在1973年由Charles Goldfarb, Edward Mosher, Paymond Lorie等IBM的人員 所提出。而提出了DTD(Ducument Type Definition)的觀念 用metalanguage 標籤來去定義文件種類區分 SGML(Standard Generalized Markup Language) 1986年由ISO制定,為第一套有標準國際認可及標準標籤的標籤語言 用途在於希望把電子文件中的文字和文件格式標準化。 歷史發展圖(如下): 優點: 1.助於伺服器之間傳送結構化資料 2.屬於文字格式且允許開發者描述結構化數據並用於各種應用程式之間溝通、交換 3.允許自定義格式,標註、交換和parser資料庫可理解的數據 生活案例: 新版健保資訊網 暨XML醫療費用申報作業 就有提及到轉為XML格式的好處 在過去使用的是TXT文字檔 就有因為檔案內容格式並沒有統一國際規範 導致後續擴充、管理和保存成本較高 以醫療費用那時的生活實例來看 XML格式中 由醫療專門的系統人員定義的四種標籤 就有明...

Parser工作技能_使用Java Dom對XML格式資料進行parser

圖片
於工作中會需要處理各種形式資料 其中一項XML  是最常見的 在如下網站線上編輯XML和立即可視化的網頁中 我們更能清楚瞭解 XML 就是一種有 樹狀 層次 結構的資料 如下方的根節點則是Company 在下一層的子節點則是Employee 以此類推...... 那我們又把 Company , Employee  FirstName, LastName ContactNo , Email ....etc 稱為 Tag 視為 Attribute https://www.tutorialspoint.com/online_xml_editor.htm 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?xml version="1.0"?> <Company> <Employee> <FirstName> Tanmay </FirstName> <LastName> Patil </LastName> <ContactNo> 1234567890 </ContactNo> <Email> tanmaypatil@xyz.com </Email> <Address> <City> Bangalore </City> <State> Karnataka </State> <Zip> 560212 </Zip> </Address> </Employee> </Company> 這裡我們用如下這個XML格式的人員資料表進行示範 1 2 3 4 5 6 7 8 9 10 11 <?xml version="1.0"?> ...