0

これらの XML ファイルがあります。

<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 です。これらの値を取得する方法がわかりません。誰でも私を助けてください!?

4

3 に答える 3

3

linq to 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();

または、次のようなことを行うことで、より詳細に制御できます

于 2013-06-20T16:44:57.187 に答える
1

に渡したパスに要素がありませんDescendants。XML ドキュメントでは、chave 要素は infNFe の子です。LINQ クエリは「rem」の下にある chave 要素を探していますが、何も見つからないため、null の結果になります。

クエリを次のように変更します。

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

ns が正しく設定されている限り、探しているものが得られるはずです。

于 2013-06-20T16:49:08.753 に答える
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.....
}
于 2013-06-20T16:48:27.113 に答える