接續上篇的基本操作,這篇主要使用 LINQ to XML 來取得 CDATA 標籤內的資料內容。

目錄:

系列文完整範例程式碼請參考 poychang/Demo-Linq-To-Xml

XML 標準中提供了 CDATA 區段,做為一種通知剖析器的方法,當 XML 剖析器遇到開頭的 <![CDATA[ 時,會將接下來的內容當成字元,而不會嘗試將其解譯成 XML 標籤實體。

此外,CDATA 區段的內容不能出現 ]]>,因為這個字串引發 CDATA 的結束訊號。

取得 CDATA 資料

混和前面幾篇文章的操作技巧,載入檔案後,先使用 DescendantNodes() 取得所有 XML 的解點資料,透過 LINQ 方式找到節點類類型 XmlNodeType.CDATA 的節點(更多節點類型請參考這裡),再將內容取出來即可。

var queryCData = from element in XDocument.Load(filePath).DescendantNodes()
                 where element.NodeType == System.Xml.XmlNodeType.CDATA
                 select element.Parent?.Value.Trim();
foreach (var data in queryCData)
{
    Console.WriteLine(data);
}

這個使用方式很常會遇到,在使用 XML 作為通訊格式時,為了清楚標示傳輸的”文字內容”在哪裡,就會使用 CDATA 區段作為標識,因此這個技巧一定要知道。

請參考 08-ExtractDataFromCData 專案的 Program.cs


參考資料:


Poy Chang

Trial and Error