0

我有这个 XML 文件:

   <?xml version="1.0" encoding="UTF-8"?>
   <cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
   <CTe>
   <emit>
       <xFant>DOW</xFant>
       <CNPJ>456789</CNPJ>
   </emit>
   <rem>
      <CNPJ>777777</CNPJ>
      <nCFOP>7101</nCFOP>
   </rem>
   </CTe>
   <protCTe versao="1.04">
   </cteProc>

要读取这个文件,我使用这个 C# 片段:

    string 
    XmlTextReader reader = new XmlTextReader(@"C:\Conhecimento\158_v01.04-rocCTe.xml");
        XmlNodeType type;
        while (reader.Read())
        {
            type = reader.NodeType;
            if (type == XmlNodeType.Element)
            {
                if (reader.Name == "xFant")
                {  reader.Read(); XFant = reader.Value; textBox1.Text = XFant;} 

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

该代码运行良好,但在子节点的情况下不起作用<CNPJ>;它只读取第一个。如何编写此代码来读取后代?我尝试过类似的东西rem.CNPJ

从其他问题中,我看到了这段代码:

字符串 CNPJ2,CNPJ3;

      XNamespace ns = "http://www.portalfiscal.inf.br/cte";
        var todas = from ide in XElement.Load(@"C:\136_v01.04.xml").Descendants(ns + "ide")

                    select new { CNPJ1 = (string)ide.Element(ns + "CNPJ") };

        var emit  = from ide1 in XElement.Load(@"C:\136_v01.04.xml").Descendants(ns + "emit")

                    select new { CNPJ2 = (string)ide1.Element(ns + "CNPJ") };

但是如何将“todas”分配给像 int CNPJ 这样的单个变量

4

1 回答 1

1

如果您使用 XDocument 读取您的 xml

XDocument XMLDoc = XDocument.Load([path to xml file]);

你有一个Descendants(XName)你可以用来获取你所追求的节点。

XElement element = XMLDoc.Descendants("CNPJ").FirstOrDefault();
于 2012-12-20T12:14:29.213 回答