共用方式為


HOW TO:擷取單一屬性 (LINQ to XML)

更新: November 2007

這個主題會說明如何擷取項目的單一屬性 (如果有屬性名稱)。這在撰寫您要尋找具有特定屬性之項目的查詢運算式時,相當實用。

XElement 類別的 Attribute 方法會傳回具有指定之名稱的 XAttribute

範例

下列範例使用 Attribute 方法。

XElement cust = new XElement("PhoneNumbers",
    new XElement("Phone",
        new XAttribute("type", "home"),
        "555-555-5555"),
    new XElement("Phone",
        new XAttribute("type", "work"),
        "555-555-6666")
);
IEnumerable<XElement> elList =
    from el in cust.Descendants("Phone")
    select el;
foreach (XElement el in elList)
    Console.WriteLine((string)el.Attribute("type"));
Dim cust As XElement = <PhoneNumbers>
                           <Phone type="home">555-555-5555</Phone>
                           <Phone type="work">555-555-6666</Phone>
                       </PhoneNumbers>
Dim elList = From el In cust...<Phone>
For Each e As XElement In elList
    Console.WriteLine(e.@type)
Next

此範例將尋找名為 Phone 樹狀結構中所有的子代,然後尋找名為 type 的屬性。

此程式碼會產生下列輸出:

home
work

如果您要擷取屬性的值,您可以進行轉型,如同將 XElement 物件轉型。下列範例為其示範。

XElement cust = new XElement("PhoneNumbers",
    new XElement("Phone",
        new XAttribute("type", "home"),
        "555-555-5555"),
    new XElement("Phone",
        new XAttribute("type", "work"),
        "555-555-6666")
);
IEnumerable<XElement> elList = 
    from el in cust.Descendants("Phone")
    select el;
foreach (XElement el in elList)
    Console.WriteLine((string)el.Attribute("type"));
Dim cust As XElement = <PhoneNumbers>
                           <Phone type="home">555-555-5555</Phone>
                           <Phone type="work">555-555-6666</Phone>
                       </PhoneNumbers>
Dim elList As IEnumerable(Of XElement) = _
    From el In cust...<Phone> _
    Select el
For Each el As XElement In elList
    Console.WriteLine(el.@type)
Next

此程式碼會產生下列輸出:

home
work

LINQ to XML 提供了 XAttribute 類別至 string、bool、bool?、int、int?、uint、uint?、long、long?、ulong、ulong?、float、float?、double、double?、decimal、decimal?、DateTime、DateTime?、TimeSpan、TimeSpan?、GUID 及 GUID? 的明確轉換運算子。

下列範例顯示命名空間中之屬性的相同程式碼。如需詳細資訊,請參閱使用 XML 命名空間

XNamespace aw = "https://www.adventure-works.com";
XElement cust = new XElement(aw + "PhoneNumbers",
    new XElement(aw + "Phone",
        new XAttribute(aw + "type", "home"),
        "555-555-5555"),
    new XElement(aw + "Phone",
        new XAttribute(aw + "type", "work"),
        "555-555-6666")
);
IEnumerable<XElement> elList =
    from el in cust.Descendants(aw + "Phone")
    select el;
foreach (XElement el in elList)
    Console.WriteLine((string)el.Attribute(aw + "type"));
Imports <xmlns:aw="https://www.adventure-works.com">

Module Module1
    Sub Main()
        Dim cust As XElement = _
            <aw:PhoneNumbers>
                <aw:Phone aw:type="home">555-555-5555</aw:Phone>
                <aw:Phone aw:type="work">555-555-6666</aw:Phone>
            </aw:PhoneNumbers>
        Dim elList As IEnumerable(Of XElement) = _
            From el In cust...<aw:Phone> _
            Select el
        For Each el As XElement In elList
            Console.WriteLine(el.@aw:type)
        Next
    End Sub
End Module

此程式碼會產生下列輸出:

home
work

請參閱

概念

LINQ to XML 座標軸