2021年7月22日 星期四

[C#] 讀取 XMLDocument

接續上一篇 C# 建立 XMLDocument ,

來看看要如何讀取。

以巢狀的資料來讀取,如下圖:

讀取的部分,主要是以直接指定的方式進行特定資料的讀取,

因為我們已經明確知道資料配置,

通常實務上也會和合作的夥伴制定好這份格式,這樣才好進行資料蒐集。

當然也可以透過XmlReader進行輪詢,慢慢把全部資料都抓出來,或查出特定資料位置後再抓。

把檔案讀進來

透過Load,把檔案路徑給他就能夠讀進來了。




Decelaration讀取

雖然目前我還沒使用到第一行的資訊,但他跟其他Element不同,也記錄一下如何讀取吧。

直接來看程式碼:



由於 XmlDeclaration 的資訊一定是在第一行(如果有這條資訊的話),

所以取出第一個Child Node便是 XmlDeclaration 。

這邊要注意的是,第一行資訊是XmlDeclaration型別,

因此取出Node時需轉回XmlDeclaration才能取得我們要的屬性(例如version與encoding)。

監看式觀察結果:

讀取根結點

來看程式碼:

這邊直接指名要選擇的Node名稱,根結點名稱為 "AOI_Information",

取出來之後一樣要轉型成 XmlElement ,才能夠讀取內部資訊,

接著就能透過 GetAttribute() 擷取特定目標的value。

監看式觀察結果:

其他節點

這次跳過Robot_Arm,直接讀取Robot_Position看看,不照順序讀取是否可以正常取出value。

這次除了讀取Attribute,也讀取InnerText,來看程式碼:


特別注意的是,Robot_Position這個Node是在AOI_Information底下,

所以必須寫成 AOI_Information / Robot_Position,這樣代表巢狀第一層,

一樣記得轉型成 XmlElement ,便可透過 GetAttribute() 與 InnerText 取出value。

監看式觀察結果:

沒有問題,只要知道想讀取的標的,就能夠取出想要的值,不一定要按照順序讀取。

第二層巢狀

第二層巢狀該怎麼取值?只需要完整列出路徑即可。

例如想取出 Robot_Position 底下的 Robot_PathType。

來看程式碼:


可以發現,指定好路徑 AOI_Information/Robot_Position/Robot_PathType,

照著之前的做法取出 Node 並轉為 XmlElement ,

即可取出 value。


以上的方法是以絕對路徑的方式取出 value,對於已知的特定資訊取出非常方便。

如果需要大量取出data的情況可能不適合,可以透過XmlReader去取會比較省力。




沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。