2010-11-22 49 views
1

我返回從SQL多個地址的XML字符串回來,這裏是正在恢復回來的例子:使用的XDocument搜索和提取數據

<Addresses> 
    <Address> 
    <LetterQueueOID>2</LetterQueueOID> 
    <Address1>115 MORNINGVIEW TRL</Address1> 
    <Address2>SCARBOROUGH, </Address2> 
    <Address3>M1B5L2</Address3> 
    <City>SCARBOROUGH</City> 
    <PostalCode>M1B5L2</PostalCode> 
    </Address> 
    <Address> 
    <LetterQueueOID>1</LetterQueueOID> 
    <Address1>GD PO BOX 685</Address1> 
    <Address2>THORNBURY, ON</Address2> 
    <Address3>N0H2P0</Address3> 
    <City>THORNBURY</City> 
    <ProvinceOrState>ON</ProvinceOrState> 
    <CountryCode>Ca</CountryCode> 
    <PostalCode>N0H2P0</PostalCode> 
    </Address> 
</Addresses> 

我想使用LINQ查詢這個XML字符串對於特定的LetterQueueOID,即 選擇地址(作爲字符串),其中LetterQueueOID = 2。

我所想到的是我可以使用XDocument,但我無法弄清楚如何得到我想要的東西:

XDocument addresses = XDocument.Parse((string)returnScalar); 
IEnumerable<XElement> items = addresses.Root.Elements("Address").ToList(); 
+0

您確定要爲此使用XML嗎? – svick 2010-11-22 17:33:15

回答

3

嘗試用凡擴展方法lambda表達式。在這裏,我得到的地址與ID 2,只是作爲一個例子

XDocument addresses = XDocument.Parse((string)returnScalar); 
var address = addresses.Root.Elements("Address").Where(address => address.Element("LetterQueueOID").Value == "2").FirstOrDefault(); 
+0

你可以用`Where()`和`FirstOrDefault(address => address.Element(「LetterQueueOID」)。Value ==「2」)``寫出。 – svick 2010-11-22 17:35:56

1

嗯,你可以這樣做:

var matches = addresses 
       .Root 
       .Elements("Address") 
       .Where(addr => (string) addr.Element("LetterQueueOID") == "2") 

然而,這將讓你所有相關<Address>元素。你說你想把地址作爲一個字符串 - 但是以什麼格式?

你可以串連像這樣的字符串:

var matches = addresses 
       .Root 
       .Elements("Address") 
       .Where(addr => (string) addr.Element("LetterQueueOID") == "2") 
       .Select(addr => (string) addr.Element("Address1") + " " 
           (string) addr.Element("Address2") + " " 
           /* etc */);