0

これは私のソースXMLです:

<?xml version="1.0" encoding="UTF-8"?>
<cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
<CTe>
<infCte versao="1.04" Id="CTe35121004211559000111570010000118991000119858">
<ide>
     <cUF>35</cUF>
     <cCT>00011985</cCT>
     <CFOP>7358</CFOP>
     <natOp>PRESTACAO DE SERVICO DE TRANSPORTE</natOp>
     <forPag>1</forPag>
     <mod>57</mod>
     <serie>1</serie>
     <nCT>11899</nCT>
     <dhEmi>2012-10-01T09:34:45</dhEmi>
</ide>
<compl>
<emit>
<rem>
<dest>
<vPrest>
<imp>
<infCTeNorm>
</infCte>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
</CTe>
<protCTe versao="1.04">
</cteProc>

私はこのコードでこのファイルを読みました:

      XmlTextReader reader = new XmlTextReader(@"C:\Separados\56000858_v01.04-procCTe.xml");
        XmlNodeType type;
        while (reader.Read())
        {
            type = reader.NodeType;
            if (type == XmlNodeType.Element)
            {
                if (reader.Name == "cUF")
                {  reader.Read(); Xmunini = reader.Value; textBox1.Text = Xmunini;}

                if (reader.Name == "cCT")
                {  reader.Read(); vtprest = reader.Value; textBox2.Text = vtprest;}

                if (reader.Name == "natOp")
                {   reader.Read(); UFIni = reader.Value; textBox3.Text = UFIni; }

                if (reader.Name == "nCT")
                { reader.Read(); NCT = reader.Value; textBox4.Text = NCT;}

しかし、私はここで多くの投稿を読みました、LINQを使用したメソッドはより効率的です、私はこれを書いてみました:

    var custs45 = from c in XElement.Load(@"C:\Separados\56000858_v01.04-procCTe.xml").Elements("Cte")

    select new { 
    CFOP = c.Element("CFOP").Value,
    xMunIni = c.Element("xMunIni").Value 
    };

私の質問は、CFOPとXmuniniを変数に割り当てる方法ですか?私はこれを書いたが何も表示しない

    string CFF;
    foreach (var valores in custs45)
    { 
      CFF = valores.CFOP.ToString() ;        
    }
4

1 に答える 1

1

ルートノードの名前空間が削除されているため、ノードが見つかりません。解決策は次のとおりです。

XDocument xdoc = XDocument.Load(path_to_xml);
XNamespace ns = "http://www.portalfiscal.inf.br/cte";
string CFF = (string)xdoc.Descendants(ns + "CFOP").Single();

CTeまた、要素名にタイプミスがあります。そして、あなたはCFOPの直接の子ではない行方不明ですCTexMunIniそして、あなたのxmlにはまだ要素がありません。

元のクエリは次のようになります。

XNamespace ns = "http://www.portalfiscal.inf.br/cte";
var custs45 = from ide in XElement.Load(path_to_xml).Descendants(ns + "ide")
              select new
              {
                  CFOP = (string)ide.Element(ns + "CFOP"),
                  xMunIni = (string)ide.Element(ns + "xMunIni")
              };
于 2012-12-05T18:25:56.967 に答える