2016-01-25 3 views
0

У меня есть простой XML нижеПочему этот XML-код не создает объекты?

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

Затем я использую этот код для разбора 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"); 

Вы также можете сделать «quick'n'dirty взломать», проверив .LocalName из элемент (который равен «GV8APIDATA» вместо полного имени элемента, включая пространство имен).

Я также считаю, что лучше использовать XPath здесь, если вы хотите понять конкретное значение (но обратите внимание, что вам, возможно, также потребуется создать пространства имен).

var document = XDocument.Parse("your xml input"); 
var elements = document.XPathSelectElements("//GV8APIDATA/ORDER"); 
foreach (var element in elements) 
{ 
    // read attribute here 
} 
Смежные вопросы