2016-07-26 4 views
0

私はdb通知から受け取っているXElementから値を取得しようとしています。空のコレクションを返す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> 

そして、これは私がデータを取得するために使用している方法であり、そしてそれは私に空であるリストを返します。 XML構造は、このようなものです。

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); 
    } 
} 

私は離れて、各フィールドの値を取得しようとした、それは私がXElementsとしてseparetlyそれらを取得することはできません。

+1

あなたのXML名前空間を持っていますか? –

+0

はXMLファイルの[ルート要素](https://en.wikipedia.org/wiki/Root_element)である「」ですか、それとも大きな要素に含まれていますか? – dbc

+0

@dbc「」の要素が、最初の部分とxmlの最後にコピーされています...それは私のせいです – Narf92

答えて

0

利用代わり.Elements().Descendants()

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)")であるためadditionnal引用符と括弧で間違っています。

これは私の作品:

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)); 
関連する問題