我如何用linq读取这个XML部分

时间:2017-08-25 21:54:52

标签: c# xml linq linq-to-xml

当我尝试读取这部分XML时,它会在我查看变量时返回nullreference: 错误在附加图像中 + base {" Referencia a objeto no establecida como instancia de un objeto。"} System.SystemException {System.NullReferenceException}

你能帮帮我吗? xml部分:

<?xml version="1.0" encoding="UTF-8"?>
<FACTURA>
<CONCEPTO>
  <CUSTOMER_TRX_ID>300000001703596</CUSTOMER_TRX_ID>
  <CUSTOMER_TRX_LINE_ID>300000001703597</CUSTOMER_TRX_LINE_ID>
  <DESCRIPTION>Salsa Extra Virgen</DESCRIPTION>
  <CANTIDAD>100</CANTIDAD>
  <VALOR_UNITARIO>10</VALOR_UNITARIO>
  <IMPORTE>1000</IMPORTE>
  <CODIGO>10009</CODIGO>
  <UNIDAD>C/4G</UNIDAD>
    <IMPUESTOCONCEPTO>
      <IMPORTEIMPUESTO>160</IMPORTEIMPUESTO>
      <DESCRIPCIONIMPUESTO>AR_16</DESCRIPCIONIMPUESTO>
      <LINK_TO_CUST_TRX_LINE_ID>300000001703597</LINK_TO_CUST_TRX_LINE_ID>
      <TASAOCUOTAIMPUESTO>16</TASAOCUOTAIMPUESTO>
      <NOMBREIMPUESTO>002</NOMBREIMPUESTO>
      <BASEIMPUESTO>1000</BASEIMPUESTO>
      <TIPOIMPUESTO>T</TIPOIMPUESTO>
      <TIPOFACTOR>TASA</TIPOFACTOR>
    </IMPUESTOCONCEPTO>
</CONCEPTO>
</FACTURA>

代码:

Error nullReference

var concepto = from c in xdoc.Descendants("CONCEPTO")//Investigar por que muestra null
                   select new
                   {
                       CUSTOMER_TRX_ID = c.Element("CUSTOMER_TRX_ID").Value,
                       CUSTOMER_TRX_LINE_ID = c.Element("CUSTOMER_TRX_LINE_ID").Value,
                       DESCRIPTION = c.Element("DESCRIPTION").Value,
                       VALOR_UNITARIO = c.Element("VALOR_UNITARIO").Value,
                       IMPORTE = c.Element("IMPORTE").Value,
                       CLAVEPRODSERVSAT = c.Element("CLAVEPRODSERVSAT").Value,
                       CODIGO = c.Element("CODIGO").Value,
                       UNIDAD = c.Element("UNIDAD").Value,
                       CANTIDAD = c.Element("CANTIDAD").Value,
                       CLAVEUNIDADSAT = c.Element("CLAVEUNIDADSAT").Value,
                   };
    foreach (var c in concepto)
    {
        conE = new ConceptoEntity();
        conE.CUSTOMER_TRX_ID = c.CUSTOMER_TRX_ID;
        conE.CUSTOMER_TRX_LINE_ID = c.CUSTOMER_TRX_LINE_ID;
        conE.DESCRIPTION = c.DESCRIPTION;
        conE.VALOR_UNITARIO = c.VALOR_UNITARIO;
        conE.IMPORTE = c.IMPORTE;
        conE.CANTIDAD = c.CANTIDAD;
        conE.CLAVEPRODSERVSAT = c.CLAVEPRODSERVSAT;
        conE.CODIGO = c.CODIGO;
        conE.UNIDAD = c.UNIDAD;
        //conE.CLAVEUNIDADSAT = c.CLAVEUNIDADSAT;
        //conE.IMPUESTOCONCEPTO = c.IMPUESTOCONCEPTO;
        lConcepto.Add(conE);
    }

这是解决方案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            List<ConceptoEntity> lConcepto = new List<ConceptoEntity>();

            XDocument xdoc = XDocument.Load(FILENAME);

            lConcepto = (from c in xdoc.Descendants("CONCEPTO")//Investigar por que muestra null
                           select new ConceptoEntity()
                           {
                               CUSTOMER_TRX_ID = c.Element("CUSTOMER_TRX_ID").Value,
                               CUSTOMER_TRX_LINE_ID = c.Element("CUSTOMER_TRX_LINE_ID").Value,
                               DESCRIPTION = c.Element("DESCRIPTION").Value,
                               VALOR_UNITARIO = c.Element("VALOR_UNITARIO").Value,
                               IMPORTE = c.Element("IMPORTE").Value,
                               //CLAVEPRODSERVSAT = c.Element("CLAVEPRODSERVSAT").Value,
                               CODIGO = c.Element("CODIGO").Value,
                               UNIDAD = c.Element("UNIDAD").Value,
                               CANTIDAD = c.Element("CANTIDAD").Value,
                               //CLAVEUNIDADSAT = c.Element("CLAVEUNIDADSAT").Value,
                           }).ToList();

        }

    }
    public class ConceptoEntity
    {
        public string CUSTOMER_TRX_ID { get; set; }
        public string CUSTOMER_TRX_LINE_ID { get; set; }
        public string DESCRIPTION { get; set; }
        public string VALOR_UNITARIO { get; set; }
        public string IMPORTE { get; set; }
        public string CANTIDAD { get; set; }
        public string CLAVEPRODSERVSAT { get; set; }
        public string CODIGO { get; set; }
        public string UNIDAD { get; set; }
    }

}

0 个答案:

没有答案