我正在處理許多相似的 XML 檔案,但有時每個檔案都有或多或少的節點。(假設這是購買或類似的帳單)。但是我需要反序列化 XML,即使它與結構不匹配(我需要為我的類獲取公共節點)。節點名稱不會不同,但節點可能比平時多
String MainXMLPATH = AppPrincipal.PathDeLecturaIndividual; //Gets xml path from another form
XmlDocument dom = new XmlDocument();
dom.Load(MainXMLPATH); //Loads xml
XmlSerializer serializer = new XmlSerializer(typeof(FacturaElectronica)); //Autogenerated Visual Studio class from XML
FacturaElectronica I;
using (Stream reader = new FileStream(MainXMLPATH, FileMode.Open)) {
// Call the Deserialize method to restore the object's state.
I = (FacturaElectronica)serializer.Deserialize(reader);
}
Console.WriteLine(I.Clave "," I.CodigoActividad "," I.CondicionVenta "," I.DetalleServicio "," I.Emisor.CorreoElectronico);//Prints the value of my xml
這是我的課:
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/facturaElectronica")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/facturaElectronica", IsNullable = false)]
public partial class FacturaElectronica {
private string claveField;
private uint codigoActividadField;
private ulong numeroConsecutivoField;
private System.DateTime fechaEmisionField;
private FacturaElectronicaEmisor emisorField;
private FacturaElectronicaReceptor receptorField;
private byte condicionVentaField;
private byte plazoCreditoField;
private byte[] medioPagoField;
private FacturaElectronicaLineaDetalle[] detalleServicioField;
private FacturaElectronicaOtrosCargos[] otrosCargosField;
private FacturaElectronicaResumenFactura resumenFacturaField;
private Signature signatureField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(DataType = "integer")]
public string Clave {
get {
return this.claveField;
}
set {
this.claveField = value;
}
}
/// <remarks/>
public uint CodigoActividad {
get {
return this.codigoActividadField;
}
set {
this.codigoActividadField = value;
}
}
/// <remarks/>
public ulong NumeroConsecutivo {
get {
return this.numeroConsecutivoField;
}
set {
this.numeroConsecutivoField = value;
}
}
/// <remarks/>
public System.DateTime FechaEmision {
get {
return this.fechaEmisionField;
}
set {
this.fechaEmisionField = value;
}
}
/// <remarks/>
public FacturaElectronicaEmisor Emisor {
get {
return this.emisorField;
}
set {
this.emisorField = value;
}
}
/// <remarks/>
public FacturaElectronicaReceptor Receptor {
get {
return this.receptorField;
}
set {
this.receptorField = value;
}
}
/// <remarks/>
public byte CondicionVenta {
get {
return this.condicionVentaField;
}
set {
this.condicionVentaField = value;
}
}
/// <remarks/>
public byte PlazoCredito {
get {
return this.plazoCreditoField;
}
set {
this.plazoCreditoField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("MedioPago")]
public byte[] MedioPago {
get {
return this.medioPagoField;
}
set {
this.medioPagoField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("LineaDetalle", IsNullable = false)]
public FacturaElectronicaLineaDetalle[] DetalleServicio {
get {
return this.detalleServicioField;
}
set {
this.detalleServicioField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("OtrosCargos")]
public FacturaElectronicaOtrosCargos[] OtrosCargos {
get {
return this.otrosCargosField;
}
set {
this.otrosCargosField = value;
}
}
/// <remarks/>
public FacturaElectronicaResumenFactura ResumenFactura {
get {
return this.resumenFacturaField;
}
set {
this.resumenFacturaField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Namespace = "http://www.w3.org/2000/09/xmldsig#")]
public Signature Signature {
get {
return this.signatureField;
}
set {
this.signatureField = value;
}
}
}
示例 XML:
<FacturaElectronica xmlns="https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/facturaElectronica" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<Clave>50601082000310133465800100001010000038444100147136</Clave>
<CodigoActividad>642005</CodigoActividad>
<NumeroConsecutivo>00100001010000038444</NumeroConsecutivo>
<FechaEmision>2020-08-01T19:47:58-06:00</FechaEmision>
<Emisor>
<Nombre>Callmyway NY</Nombre>
<Identificacion>
<Tipo>02</Tipo>
<Numero>3101334658</Numero>
</Identificacion>
<Ubicacion>
<Provincia>1</Provincia>
<Canton>01</Canton>
<Distrito>05</Distrito>
<Barrio>13</Barrio>
<OtrasSenas>COSTADO NORTE COLEGIO ABOGADOS FRENTE ENTRADA PRINCIPAL</OtrasSenas>
</Ubicacion>
<Telefono>
<CodigoPais>506</CodigoPais>
<NumTelefono>40004000</NumTelefono>
</Telefono>
<CorreoElectronico>[email protected]</CorreoElectronico>
</Emisor>
<Receptor>
<Nombre>GRUPO APLIX LATINOAMERICA SOCIEDAD ANONIMA</Nombre>
<Identificacion>
<Tipo>02</Tipo>
<Numero>3101753993</Numero>
</Identificacion>
</Receptor>
<CondicionVenta>01</CondicionVenta>
<PlazoCredito>0</PlazoCredito>
<MedioPago>04</MedioPago>
<MedioPago>02</MedioPago>
<DetalleServicio>
<LineaDetalle>
<NumeroLinea>1</NumeroLinea>
<CodigoComercial>
<Tipo>04</Tipo>
<Codigo>TR</Codigo>
</CodigoComercial>
<Cantidad>1</Cantidad>
<UnidadMedida>St</UnidadMedida>
<Detalle>Consumo Mensual Celular (2020-07)(6h23m9s)</Detalle>
<PrecioUnitario>839.99764</PrecioUnitario>
<MontoTotal>839.99764</MontoTotal>
<SubTotal>839.99764</SubTotal>
<BaseImponible>839.99764</BaseImponible>
<Impuesto>
<Codigo>01</Codigo>
<CodigoTarifa>08</CodigoTarifa>
<Tarifa>13.00</Tarifa>
<Monto>109.19969</Monto>
</Impuesto>
<ImpuestoNeto>109.19969</ImpuestoNeto>
<MontoTotalLinea>949.19733</MontoTotalLinea>
</LineaDetalle>
<LineaDetalle>
<NumeroLinea>2</NumeroLinea>
<CodigoComercial>
<Tipo>04</Tipo>
<Codigo>TR</Codigo>
</CodigoComercial>
<Cantidad>1</Cantidad>
<UnidadMedida>St</UnidadMedida>
<Detalle>Consumo Mensual Fijo (2020-07)(1h58m54s)</Detalle>
<PrecioUnitario>903.64052</PrecioUnitario>
<MontoTotal>903.64052</MontoTotal>
<SubTotal>903.64052</SubTotal>
<BaseImponible>903.64052</BaseImponible>
<Impuesto>
<Codigo>01</Codigo>
<CodigoTarifa>08</CodigoTarifa>
<Tarifa>13.00</Tarifa>
<Monto>117.47327</Monto>
</Impuesto>
<ImpuestoNeto>117.47327</ImpuestoNeto>
<MontoTotalLinea>1021.11379</MontoTotalLinea>
</LineaDetalle>
<LineaDetalle>
<NumeroLinea>3</NumeroLinea>
<CodigoComercial>
<Tipo>04</Tipo>
<Codigo>TR</Codigo>
</CodigoComercial>
<Cantidad>1</Cantidad>
<UnidadMedida>St</UnidadMedida>
<Detalle>Consumo Mensual internacional (2020-07)(2m47s)</Detalle>
<PrecioUnitario>297.81699</PrecioUnitario>
<MontoTotal>297.81699</MontoTotal>
<SubTotal>297.81699</SubTotal>
<BaseImponible>297.81699</BaseImponible>
<Impuesto>
<Codigo>01</Codigo>
<CodigoTarifa>08</CodigoTarifa>
<Tarifa>13.00</Tarifa>
<Monto>38.71621</Monto>
</Impuesto>
<ImpuestoNeto>38.71621</ImpuestoNeto>
<MontoTotalLinea>336.53320</MontoTotalLinea>
</LineaDetalle>
<LineaDetalle>
<NumeroLinea>4</NumeroLinea>
<CodigoComercial>
<Tipo>04</Tipo>
<Codigo>TR</Codigo>
</CodigoComercial>
<Cantidad>1</Cantidad>
<UnidadMedida>St</UnidadMedida>
<Detalle>Seleccion numero a la carta: 40015220</Detalle>
<PrecioUnitario>4357.29847</PrecioUnitario>
<MontoTotal>4357.29847</MontoTotal>
<SubTotal>4357.29847</SubTotal>
<BaseImponible>4357.29847</BaseImponible>
<Impuesto>
<Codigo>01</Codigo>
<CodigoTarifa>08</CodigoTarifa>
<Tarifa>13.00</Tarifa>
<Monto>566.44880</Monto>
</Impuesto>
<ImpuestoNeto>566.44880</ImpuestoNeto>
<MontoTotalLinea>4923.74727</MontoTotalLinea>
</LineaDetalle>
</DetalleServicio>
<OtrosCargos>
<TipoDocumento>02</TipoDocumento>
<Detalle>Timbre de la Cruz Roja</Detalle>
<MontoCargo>63.98754</MontoCargo>
</OtrosCargos>
<OtrosCargos>
<TipoDocumento>99</TipoDocumento>
<Detalle>Contribucion 911</Detalle>
<MontoCargo>47.99065</MontoCargo>
</OtrosCargos>
<ResumenFactura>
<CodigoTipoMoneda>
<CodigoMoneda>CRC</CodigoMoneda>
<TipoCambio>1</TipoCambio>
</CodigoTipoMoneda>
<TotalServGravados>6398.75362</TotalServGravados>
<TotalServExentos>0.00000</TotalServExentos>
<TotalServExonerado>0.00000</TotalServExonerado>
<TotalMercanciasGravadas>0.00000</TotalMercanciasGravadas>
<TotalMercanciasExentas>0.00000</TotalMercanciasExentas>
<TotalMercExonerada>0.00000</TotalMercExonerada>
<TotalGravado>6398.75362</TotalGravado>
<TotalExento>0.00000</TotalExento>
<TotalExonerado>0.00000</TotalExonerado>
<TotalVenta>6398.75362</TotalVenta>
<TotalDescuentos>0.00000</TotalDescuentos>
<TotalVentaNeta>6398.75362</TotalVentaNeta>
<TotalImpuesto>831.83797</TotalImpuesto>
<TotalOtrosCargos>111.97819</TotalOtrosCargos>
<TotalComprobante>7342.56978</TotalComprobante>
</ResumenFactura>
</FacturaElectronica>
我嘗試從較大的 xml 檔案創建計費類,但由于缺少節點而無法正常作業。由于該類與 XML 結構不匹配,因此它不適用于除我與您共享的檔案之外的所有檔案。我希望打開類似結構的 XML 檔案
uj5u.com熱心網友回復:
解決了
我使用 Visual Studio 自動生成的代碼。經過深入研究,我找到了 XSD.exe 工具。通過這個工具,我發現了如何從 XSD 檔案創建一個類。我需要下載鏈接模式才能使其作業:
首先,我打開了 VS 2019 的開發人員命令提示符,然后我使用 CD 命令到達檔案路徑,之后,我使用了以下命令:
xsd /c {random_xsd_file}.xsd {another_rnd_xsd_file}.xsd
有了這個,我創建了一個包含所有需要的類的 .cs 檔案。(如果有人有任何問題,請隨時提出,我花了很多時間研究這個:p)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/531628.html
