【问题标题】:Access to specific element attribute in XML with serialization C#使用序列化 C# 访问 XML 中的特定元素属性
【发布时间】:2019-07-16 16:16:17
【问题描述】:

我有这种结构的 XML,但我正在尝试访问第一个“Impuestos”以到达其中的“Traslado”,但它并没有按照我的方式工作,我是新手XML,我不知道如何指定我需要获取什么属性。

我总是得到没有“概念”的结构的值,我不想要这些值。

<cfdi:Concepto ClaveProdServ="44122016" NoIdentificacion="006001" Cantidad="8.000" ClaveUnidad="XBX" Unidad="Caja" Descripcion="BROCHE ARCHIVO BACO B-182 8CMS CAJAC/50 CAJA AZUL" ValorUnitario="33.55" Importe="268.40" Descuento="0.00">
    <cfdi:Impuestos>
        <cfdi:Traslados>
            <cfdi:Traslado Base="268.40" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="42.94"/>
        </cfdi:Traslados>
    </cfdi:Impuestos>
</cfdi:Concepto>
<cfdi:Impuestos TotalImpuestosTrasladados="415.76">
    <cfdi:Traslados>
        <cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="415.76"/>
    </cfdi:Traslados>
</cfdi:Impuestos>

这是我用来执行此操作的代码,此代码基于我在 Microsoft 论坛等中看到的。

public class Comprobante {
    [XmlArrayItem("Concepto")]
    public TConcepto[] Conceptos;

    [XmlElement()]
    public TImpuestos Impuestos;
}

public class TImpuestos
{
    [XmlArrayItem("Traslado")]
    public TTraslado[] Traslados;
}

public class TTraslado
{
    [XmlAttribute()]
    public string Impuesto;
    [XmlAttribute()]
    public string Importe;
}

使用此代码,我得到的值是 Impuesto = "002" 和 Importe = "415.76"。
但是我想要 Impuesto = "002" 和 Importe = "42.94",我需要你的帮助来指导我实现目标的最佳方式,谢谢。

【问题讨论】:

    标签: c# xml serialization


    【解决方案1】:

    使用 Xml Linq:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;
    
    namespace ConsoleApplication120
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                XDocument doc = XDocument.Load(FILENAME);
                XElement Impuestos = doc.Descendants().Where(x => x.Name.LocalName == "Impuestos").FirstOrDefault();
    
                XElement Traslado = Impuestos.Descendants().Where(x => x.Name.LocalName == "Traslado").FirstOrDefault();
    
                string Impuesto =  (string)Traslado.Attribute("Impuesto");
                decimal Importe = (decimal)Traslado.Attribute("Importe");
            }
        }
    
    
    }
    

    【讨论】:

    • 谢谢,我会试试这个,如果有效,我会告诉你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多