LINQ to XML 概觀

LINQ to XML 提供運用 .NET Language-Integrated Query (LINQ) Framework 的記憶體中 XML 程式開發介面。 LINQ to XML 會使用 .NET 功能,而且相當於更新的、重新設計的文件物件模型 (DOM) XML 程式發展介面。

XML 已被廣泛採用為格式化許多內容之資料的方式。 例如,您可以在 Web、組態檔、Microsoft Office Word 檔案與資料庫中發現 XML。

LINQ to XML 是經過重新設計,用以進行 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 的另一項優點是將查詢結果當做 XElementXAttribute 物件建構函式參數的功能,可提供建立 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。
  • 使用 AddRemoveReplaceWithSetValue 之類的方法管理記憶體中 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 常值。 您也可如同在 C3 版本,在 Visual Basic 中使用 XElement

如需詳細資訊,請參閱 XML 樹狀結構

另請參閱