2013-07-08 169 views
1

我正在使用VS2010 C#。我有一個XML文件正在通過XDocument讀入。我需要將XML數據加載到類或var中,然後能夠訪問該數據以在Windows窗體中打印到文本框。C#XML Linq解析

我已經嘗試了幾件事情。 XDocument.Parse獲取XML,因爲我可以將它打印到文本框中,並且它正確無誤。然而,從那裏,數據似乎沒有讀入類或var。 (數量爲0,元素爲空等)。

我下面這個教程,但它現在是很老:http://tech.pro/tutorial/743/introduction-to-linq-simple-xml-parsing

任何人都可以點我如何1)我可以將數據加載到一個列表,2)訪問子元素打印出來一個文本框?

代碼:

XDocument xmlResponse = XDocument.Parse(e.Result); 

var hds = 
(from hdi in xmlResponse.Descendants("HDInfo") 
    select new HDInfo 
    { 
    freeSpace = (long)hdi.Element("freeSpace"), 
    percentFree = (float)hdi.Element("percentFree"), 
    volume = (String)hdi.Element("volume"), 
    }); 

的XML:

<ArrayOfHDInfo xmlns="http://schemas.datacontract.org/2004/07/project" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<HDInfo> 
    <freeSpace>187783532544</freeSpace> 
    <percentFree>75.1457443</percentFree> 
    <volume>C:\</volume> 
</HDInfo> 
<HDInfo> 
    <freeSpace>583875145728</freeSpace> 
    <percentFree>77.83411</percentFree> 
    <volume>D:\</volume> 
</HDInfo> 
</ArrayOfHDInfo> 

回答

2

你必須使用你的查詢中XNamespace對象:

var ns = XNamespace.Get("http://schemas.datacontract.org/2004/07/project"); 

var hds = 
(from hdi in xmlResponse.Descendants(ns + "HDInfo") 
    select new HDInfo 
    { 
    freeSpace = (long)hdi.Element(ns + "freeSpace"), 
    percentFree = (float)hdi.Element(ns + "percentFree"), 
    volume = (String)hdi.Element(ns + "volume"), 
    });