2016-01-25 37 views
0

我有以下這個XML代碼爲什麼不創建對象?

<?xml version="1.0"?> 
    <GV8APIDATA xmlns="gv8api-trayport-com"> 
     <ORDER Action="Query" /> 
    </GV8APIDATA> 

簡單的XML然後我使用此代碼來解析XML

var xml = XDocument.Load(@"C:\data\data.xml"); 

var orders = 
    (from order in xml.Root.Elements("GV8APIDATA").Elements("ORDER") 
     select new Order 
     { 
      Action = order.Attribute("Action").Value 
     }).ToList(); 

我已經試過Desecendants,元素等的不同組合,並沒有什麼工作負荷?

我從來沒有得到任何訂單

這應該很簡單!我錯過了什麼?這可能是非常明顯的事情!

回答

0

您無法讀取這樣的元素,是因爲你需要支持XML命名空間:

public static XNamespace ns = "gv8api-trayport-com"; 
var dataElements = document.Elements(ns + "GV8APIDATA"); 

你也可以做一個通過檢查的.LocalName「quick'n'dirty黑客」一個元素(與「GV8APIDATA」相同,而不是完全限定的元素名稱,包括名稱空間)。

我也認爲最好在這裏使用XPath,如果你想掌握一個特定的值(但請注意,你可能需要在這裏設置命名空間)。

var document = XDocument.Parse("your xml input"); 
var elements = document.XPathSelectElements("//GV8APIDATA/ORDER"); 
foreach (var element in elements) 
{ 
    // read attribute here 
} 
相關問題