2013-06-20 3 views
0

У меня есть эти XML-файл:Чтение из XML в список строк C#

<cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <CTe xmlns="http://www.portalfiscal.inf.br/cte"> 
     <infCte versao="1.04" Id="CTexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"> 
      <ide> 
       <compl> 
        <emit> 
         <rem> 
          <CNPJ>11111111111</CNPJ> 
          <IE>2222222</IE> 
          <xNome>Teste</xNome> 
          <enderReme> 
           <xLgr>xxxxxxx xxxxxx</xLgr> 
           <nro>S/N</nro> 
           <xCpl>AREA C</xCpl> 
           <xBairro>PARQ. xxxxxx</xBairro> 
           <cMun>125455</cMun> 
           <xMun>xxxxxx</xMun> 
           <CEP>548848</CEP> 
           <UF>AA</UF> 
           <xPais>BRASIL</xPais> 
          </enderReme> 
          <infNFe> 
           **<chave>1</chave>** 
           **<chave>2</chave>** 
           **<chave>3</chave>** 
          </infNFe> 
         </rem> 
         <exped> 
          <CNPJ>2342342342342</CNPJ> 
          <IE>15342683242345480</IE> 
           ........................... 

И мне нужно, чтобы получить значения и поместить внутри строки

Я пытаюсь сделать это:

var ListaChave = new List<string>(); 

var lista = (from c in xDoc.Descendants(ns + "/rem/chave") select c.Value).ToList(); 

foreach (string s in lista) 
    { 
    add the values..... 
    } 

Но s var имеет значение null. Я не знаю, как получить эти ценности. Кто-нибудь может мне помочь !?

+0

Какое значение имеет переменную 'ns', когда вы вызываете метод' Descendants() '? – HuorSwords

+1

Измените часть 'Descendants' на' Descendants (ns + "/ rem/infNFe/chave") '. Элемент chave является дочерним элементом элемента theNFE. – Tim

ответ

3

Использование LINQ для XML

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

XNamespace ns = @"http://www.portalfiscal.inf.br/cte"; 

List<string> strList = doc.Descendants(ns+"rem").Descendants(ns+"chave").Select(e => e.Value).ToList(); 

и в качестве альтернативы, вы можете иметь больше контроля, делая вещи, как

+0

обновлено и протестировано на этот раз –

+0

Perfect .. tanks –

0

Вы можете попробовать с этим кодом, просто добавив infNFe:

var ListaChave = new List<string>(); 

var lista = (from c in xDoc.Descendants(ns + "/rem/infNFe/chave") 
      select c.Value).ToList(); 

foreach (string s in lista) 
{ 
    add the values..... 
} 
1

Вам не хватает элемента в пути, который вы передали до Descendants. В вашем документе XML элементы chave являются дочерними элементами infNFe. Ваш запрос LINQ ищет элементы chave в разделе «rem» и не находит никаких, следовательно, нулевой результат.

Изменить запрос к этому:

var lista = (from c in xDoc.Descendants(ns + "/rem/infNFe/chave") 
      select c.Value).ToList(); 

И вы должны получить то, что вы ищете, до тех пор, как нс установлено правильно.