我已经拥有具有这种结构的XML,但是我正试图访问第一个“ Impuestos”以到达其中的“ Traslado”,但是它无法按我的方式工作,我是新手XML,我不知道如何指定需要获取的属性。
我总是在没有“ Concepto”的情况下获取结构的值,并且我不希望这些值。
<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”,谢谢您的帮助,以指导我实现目标的最佳方法。
答案 0 :(得分:0)
使用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");
}
}
}