2013-07-08 16 views
1

Я использую VS2010 C#. У меня есть XML-файл, который читается через XDocument. Мне нужно загрузить данные XML в класс или var, а затем получить доступ к этим данным для печати в текстовые поля в форме Windows.C# XML Linq Parsing

Я пробовал несколько вещей. 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"), 
    });