2016-07-26 100 views
0

我試圖從我從數據庫通知收到的XElement中獲取值。 的XML結構是這樣的:XElement.Elements()返回空集合

<?xml version="1.0"?> 
<root> 
    <inserted> 
     <row> 
      <CODI_AVERIA>22</CODI_AVERIA> 
      <NUMERO_LINIA>2</NUMERO_LINIA> 
      <DIA>2016-07-17T00:00:00</DIA> 
      <HORA>1899-12-30T10:26:15.790</HORA> 
      <CODI_USUARI>1</CODI_USUARI> 
      <ACCIO>0</ACCIO> 
      <CODI_PSEUDO>-1</CODI_PSEUDO> 
     </row> 
    </inserted> 
</root> 

這是我使用來獲取數據的方法,並返回我列表是空的。

static void getAccio(XElement xml) 
{ 
    try 
    { 
     xml.Descendants("deleted").Remove(); 

     var items = xml.Elements("row").Select(n => new 
     { 
      Codi_averia = n.Element("CODI_AVERIA").Value, 
      Numero_linia = n.Element("NUMERO_LINIA)").Value, 
      Accio = n.Element("ACCIO").Value 
     }).ToList(); 
    } 
    catch (Exception e) 
    { 
     Console.Write(e.Message); 
    } 
} 

我試圖讓每個字段的值分開,它不會讓我separetly讓他們爲XElements。

+1

你的XML是否有一個命名空間? –

+0

是你的XML文件的[根元素](https://en.wikipedia.org/wiki/Root_element)的'還是包含在一些更大的元素中? – dbc

+0

@dbc它有''元素只是在開始和在我複製的xml結尾...這是我的錯 – Narf92

回答

0

使用.Descendants(),而不是.Elements()

var items = xml.Descendants("row").Select(n => new 
    { 
     Codi_averia = n.Element("CODI_AVERIA").Value, 
     Numero_linia = n.Element("NUMERO_LINIA)").Value, 
     Accio = n.Element("ACCIO").Value 
    }).ToList(); 

.Elements發現只有那些直接後裔,即直接子這些元素。 - 我假設你的XElementinserted部分的父母。

對於差異.Element.Descendantssee this question

之間。如果你不希望找到他們在所有的內部元素也然後做.Element("inserted").Elements("rows")

+1

謝謝,這解決了問題! – Narf92

+0

不客氣 –

0

您的文檔沒有任何根元素的名稱row。相反,你需要選擇inserted第一,並列舉的insertedrow元素:

var xml = @"<inserted> 
    <row>  
     <CODI_AVERIA>21</CODI_AVERIA>  
     <NUMERO_LINIA>2</NUMERO_LINIA>  
     <DIA>2016-07-17T00:00:00</DIA>  
     <HORA>1899-12-30T10:26:15.790</HORA>  
     <CODI_USUARI>1</CODI_USUARI>  
     <ACCIO>0</ACCIO>  
     <CODI_PSEUDO>-1</CODI_PSEUDO> 
    </row> 
</inserted>"; 

var xdoc = XDocument.Parse(xml); 

var items = xdoc.Element("inserted").Elements("row").Select(n => new 
{ 
    Codi_averia = n.Element("CODI_AVERIA").Value, 
    Numero_linia = n.Element("NUMERO_LINIA").Value, 
    Accio = n.Element("ACCIO").Value 

}).ToList(); 
0

在示例代碼("NUMERO_LINIA)")是因爲其它附加報價和括號的錯誤。

這個工作對我來說:

XDocument xd = XDocument.Load("XMLFile1.xml"); 

var lst = (from n in xd.Descendants("row") 
      select new 
      { 
       Codi_averia = n.Element("CODI_AVERIA").Value, 
       Numero_linia = n.Element("NUMERO_LINIA").Value, 
       Accio = n.Element("ACCIO").Value 
      }).ToList(); 

foreach (var item in lst) 
    Console.WriteLine(string.Format("{0}{1}{2}", item.Codi_averia, item.Numero_linia, item.Accio));