LINQ to XML 提供了一個基於記憶體的 XML 程式設計介面,透過 .NET Language-Integrated 查詢(LINQ)框架來實現。 LINQ to XML 使用 .NET 功能,而且與更新、重新設計的檔物件模型 (DOM) XML 程式設計介面相當。
XML 被廣泛採用為許多內容中數據格式化的方式。 例如,您可以在 Web、組態檔、Microsoft Office Word 檔案和資料庫中找到 XML。
LINQ to XML 是一種 up-to日期,重新設計了使用 XML 進行程式設計的方法。 它提供檔案物件模型 (DOM) 的記憶體內部檔案修改功能,並支援LINQ查詢表達式。 雖然這些查詢表達式在語法上與 XPath 不同,但它們提供類似的功能。
LINQ to XML 開發人員
LINQ to XML 以各種開發人員為目標。 對於想要完成某些工作的平均開發人員,LINQ to XML 會藉由提供類似 SQL 的查詢體驗,讓 XML 更容易。 只要進行一些研究,程式設計人員就可以學習以自己所選擇的程式設計語言撰寫簡潔且功能強大的查詢。
專業開發人員可以使用 LINQ to XML 大幅提升其生產力。 透過 LINQ to XML,他們可以撰寫較少的程式代碼,使其更具表達性、更精簡且功能更強大。 它們可以同時使用多個數據域的查詢表達式。
LINQ to XML 是 XML 程式設計介面
LINQ to XML 是啟用 LINQ 的記憶體內部 XML 程式設計介面,可讓您從 .NET 程式設計語言中使用 XML。
LINQ to XML 就像文件物件模型 (DOM),因為它會將 XML 檔帶入記憶體中。 您可以查詢和修改檔,並在修改文件之後,將其儲存至檔案或串行化檔,並透過因特網傳送。 不過,LINQ to XML 與 DOM 不同:
- 它提供較輕量且更容易使用的新物件模型。
- 它會利用 C# 和 Visual Basic 中的語言功能。
LINQ to XML 最重要的優點是其與 Language-Integrated Query (LINQ) 整合。 這項整合可讓您在記憶體內部 XML 檔上撰寫查詢,以擷取元素和屬性的集合。 LINQ to XML 的查詢功能在功能上類似於 XPath 和 XQuery,但在語法上有所不同。 在 C# 和 Visual Basic 中整合 LINQ 可提供更強大的輸入、編譯時間檢查,以及改善的調試程序支援。
LINQ to XML 的另一個優點是可以使用查詢結果作為 XElement 和 XAttribute 物件建構函數的參數,從而提供了一種強大的方法來建立 XML 樹狀結構。 這種方法稱為 功能建構,可讓開發人員輕鬆地將 XML 樹狀結構從一個圖形轉換成另一個圖形。
例如,您可能會有一般 XML 採購單,如 範例 XML 檔案:一般採購單中所述。 藉由使用 LINQ to XML,您可以執行下列查詢,以取得採購單中每個項目元素的元件編號屬性值:
// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);
XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);
IEnumerable<string> partNos = from item in purchaseOrder.Descendants("Item")
select (string) item.Attribute("PartNumber");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)
Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)
Dim partNos = _
From item In purchaseOrder...<Item> _
Select item.@PartNumber
在 C# 中,這可以用方法語法形式重寫:
IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));
在另一個範例中,您可能會想要一個按照零件編號排序的清單,其中包含那些價值超過 $100 的項目。 若要取得這項資訊,您可以執行下列查詢:
// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);
XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);
IEnumerable<XElement> pricesByPartNos = from item in purchaseOrder.Descendants("Item")
where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
orderby (string)item.Element("PartNumber")
select item;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)
Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)
Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item
同樣地,在 C# 中,這可以在方法語法形式中重寫:
IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
.Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
.OrderBy(order => order.Element("PartNumber"));
除了這些 LINQ 功能之外,LINQ to XML 還提供改良的 XML 程式設計介面。 使用 LINQ to XML,您可以:
- 從 檔案 或 數據流載入 XML。
- 將 XML 串行化為檔案或數據流。
- 使用功能建構從頭建立 XML。
- 使用類似 XPath 的軸來查詢 XML。
- 使用 Add、Remove、ReplaceWith 和 SetValue 等方法操作記憶體內的 XML 樹狀結構。
- 使用 XSD 驗證 XML 樹狀結構。
- 使用這些功能的組合,將 XML 樹狀結構從一個圖形轉換成另一個圖形。
建立 XML 樹狀結構
使用 LINQ to XML 進行程式設計的最顯著優點之一,就是很容易建立 XML 樹狀結構。 例如,若要建立小型 XML 樹狀結構,您可以撰寫程式代碼,如下所示:
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144",
new XAttribute("Type", "Home")),
new XElement("phone", "425-555-0145",
new XAttribute("Type", "Work")),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
Dim contacts As XElement = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone>206-555-0144</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
備註
此範例的 Visual Basic 版本會使用 XML 常值。 您也可以在 Visual Basic 中使用 XElement,如同在 C# 中一樣。
如需詳細資訊,請參閱 XML 樹狀結構。