Agregar cadena para Cfdi 4

This commit is contained in:
El Mau 2022-01-31 18:42:02 -06:00
parent e726cda085
commit bebcd29710
4 changed files with 788 additions and 365 deletions

View File

@ -1,347 +1,401 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11" xmlns:donat="http://www.sat.gob.mx/donat" xmlns:divisas="http://www.sat.gob.mx/divisas" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales" xmlns:pfic="http://www.sat.gob.mx/pfic" xmlns:tpe="http://www.sat.gob.mx/TuristaPasajeroExtranjero" xmlns:nomina12="http://www.sat.gob.mx/nomina12" xmlns:registrofiscal="http://www.sat.gob.mx/registrofiscal" xmlns:pagoenespecie="http://www.sat.gob.mx/pagoenespecie" xmlns:aerolineas="http://www.sat.gob.mx/aerolineas" xmlns:valesdedespensa="http://www.sat.gob.mx/valesdedespensa" xmlns:consumodecombustibles="http://www.sat.gob.mx/consumodecombustibles" xmlns:notariospublicos="http://www.sat.gob.mx/notariospublicos" xmlns:vehiculousado="http://www.sat.gob.mx/vehiculousado" xmlns:servicioparcial="http://www.sat.gob.mx/servicioparcialconstruccion" xmlns:decreto="http://www.sat.gob.mx/renovacionysustitucionvehiculos" xmlns:destruccion="http://www.sat.gob.mx/certificadodestruccion" xmlns:obrasarte="http://www.sat.gob.mx/arteantiguedades" xmlns:ine="http://www.sat.gob.mx/ine" xmlns:iedu="http://www.sat.gob.mx/iedu" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos" xmlns:terceros="http://www.sat.gob.mx/terceros" xmlns:pago10="http://www.sat.gob.mx/Pagos"> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11" xmlns:donat="http://www.sat.gob.mx/donat" xmlns:divisas="http://www.sat.gob.mx/divisas" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales" xmlns:pfic="http://www.sat.gob.mx/pfic" xmlns:tpe="http://www.sat.gob.mx/TuristaPasajeroExtranjero" xmlns:nomina12="http://www.sat.gob.mx/nomina12" xmlns:registrofiscal="http://www.sat.gob.mx/registrofiscal" xmlns:pagoenespecie="http://www.sat.gob.mx/pagoenespecie" xmlns:aerolineas="http://www.sat.gob.mx/aerolineas" xmlns:valesdedespensa="http://www.sat.gob.mx/valesdedespensa" xmlns:notariospublicos="http://www.sat.gob.mx/notariospublicos" xmlns:vehiculousado="http://www.sat.gob.mx/vehiculousado" xmlns:servicioparcial="http://www.sat.gob.mx/servicioparcialconstruccion" xmlns:decreto="http://www.sat.gob.mx/renovacionysustitucionvehiculos" xmlns:destruccion="http://www.sat.gob.mx/certificadodestruccion" xmlns:obrasarte="http://www.sat.gob.mx/arteantiguedades" xmlns:ine="http://www.sat.gob.mx/ine" xmlns:iedu="http://www.sat.gob.mx/iedu" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos" xmlns:detallista="http://www.sat.gob.mx/detallista" xmlns:ecc12="http://www.sat.gob.mx/EstadoDeCuentaCombustible12" xmlns:consumodecombustibles11="http://www.sat.gob.mx/ConsumoDeCombustibles11" xmlns:gceh="http://www.sat.gob.mx/GastosHidrocarburos10" xmlns:ieeh="http://www.sat.gob.mx/IngresosHidrocarburos10" xmlns:cartaporte20="http://www.sat.gob.mx/CartaPorte20" xmlns:pago20="http://www.sat.gob.mx/Pagos20">
<!-- Con el siguiente método se establece que la salida deberá ser en texto --> <!-- Con el siguiente método se establece que la salida deberá ser en texto -->
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/> <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:include href="utilerias.xslt"/> <xsl:include href="utilerias.xslt"/>
<xsl:include href="comercioexterior11.xslt"/> <!--
<xsl:include href="leyendasFisc.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/donat/donat11.xslt"/>
<xsl:include href="nomina12.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/divisas/divisas.xslt"/>
<xsl:include href="implocal.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xslt"/>
<xsl:include href="donat11.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/leyendasFiscales/leyendasFisc.xslt"/>
<xsl:include href="ine11.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xslt"/>
<xsl:include href="iedu.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/TuristaPasajeroExtranjero/TuristaPasajeroExtranjero.xslt"/>
<xsl:include href="pagos10.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xslt"/>
<xsl:include href="divisas.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/cfdiregistrofiscal/cfdiregistrofiscal.xslt"/>
<xsl:include href="servicioconstruccion.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/pagoenespecie/pagoenespecie.xslt"/>
<xsl:include href="cartaporte20.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/aerolineas/aerolineas.xslt"/>
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/valesdedespensa/valesdedespensa.xslt"/>
<!-- <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/notariospublicos/notariospublicos.xslt"/>
<xsl:include href="ecc11.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/vehiculousado/vehiculousado.xslt"/>
<xsl:include href="pfic.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/servicioparcialconstruccion/servicioparcialconstruccion.xslt"/>
<xsl:include href="TuristaPasajeroExtranjero.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/renovacionysustitucionvehiculos/renovacionysustitucionvehiculos.xslt"/>
<xsl:include href="cfdiregistrofiscal.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/certificadodestruccion/certificadodedestruccion.xslt"/>
<xsl:include href="pagoenespecie.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/arteantiguedades/obrasarteantiguedades.xslt"/>
<xsl:include href="aerolineas.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xslt"/>
<xsl:include href="valesdedespensa.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/ine/ine11.xslt"/>
<xsl:include href="consumodecombustibles.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/iedu/iedu.xslt"/>
<xsl:include href="notariospublicos.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/ventavehiculos/ventavehiculos11.xslt"/>
<xsl:include href="vehiculousado.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/detallista/detallista.xslt"/>
<xsl:include href="servicioparcialconstruccion.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/EstadoDeCuentaCombustible/ecc12.xslt"/>
<xsl:include href="renovacionysustitucionvehiculos.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/consumodecombustibles/consumodeCombustibles11.xslt"/>
<xsl:include href="certificadodedestruccion.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/GastosHidrocarburos10/GastosHidrocarburos10.xslt"/>
<xsl:include href="obrasarteantiguedades.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/IngresosHidrocarburos10/IngresosHidrocarburos.xslt"/>
<xsl:include href="ventavehiculos11.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte20.xslt"/>
<xsl:include href="terceros11.xslt"/> <xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xslt"/>
--> -->
<!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || -->
<!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || --> <xsl:template match="/">|<xsl:apply-templates select="/cfdi:Comprobante"/>||</xsl:template>
<xsl:template match="/">|<xsl:apply-templates select="/cfdi:Comprobante"/>||</xsl:template> <!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante -->
<!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante --> <xsl:template match="cfdi:Comprobante">
<xsl:template match="cfdi:Comprobante"> <!-- Iniciamos el tratamiento de los atributos de comprobante -->
<!-- Iniciamos el tratamiento de los atributos de comprobante --> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Version"/>
<xsl:with-param name="valor" select="./@Version"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@Serie"/>
<xsl:with-param name="valor" select="./@Serie"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@Folio"/>
<xsl:with-param name="valor" select="./@Folio"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Fecha"/>
<xsl:with-param name="valor" select="./@Fecha"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@FormaPago"/>
<xsl:with-param name="valor" select="./@FormaPago"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@NoCertificado"/>
<xsl:with-param name="valor" select="./@NoCertificado"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@CondicionesDePago"/>
<xsl:with-param name="valor" select="./@CondicionesDePago"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@SubTotal"/>
<xsl:with-param name="valor" select="./@SubTotal"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@Descuento"/>
<xsl:with-param name="valor" select="./@Descuento"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Moneda"/>
<xsl:with-param name="valor" select="./@Moneda"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@TipoCambio"/>
<xsl:with-param name="valor" select="./@TipoCambio"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Total"/>
<xsl:with-param name="valor" select="./@Total"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@TipoDeComprobante"/>
<xsl:with-param name="valor" select="./@TipoDeComprobante"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@Exportacion"/>
<xsl:with-param name="valor" select="./@MetodoPago"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@MetodoPago"/>
<xsl:with-param name="valor" select="./@LugarExpedicion"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@LugarExpedicion"/>
<xsl:with-param name="valor" select="./@Confirmacion"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<!-- <xsl:with-param name="valor" select="./@Confirmacion"/>
Llamadas para procesar al los sub nodos del comprobante </xsl:call-template>
--> <!--
<xsl:apply-templates select="./cfdi:CfdiRelacionados"/> Llamadas para procesar al los sub nodos del comprobante
<xsl:apply-templates select="./cfdi:Emisor"/> -->
<xsl:apply-templates select="./cfdi:Receptor"/> <xsl:apply-templates select="./cfdi:InformacionGlobal"/>
<xsl:apply-templates select="./cfdi:Conceptos"/> <xsl:apply-templates select="./cfdi:CfdiRelacionados"/>
<xsl:apply-templates select="./cfdi:Impuestos"/> <xsl:apply-templates select="./cfdi:Emisor"/>
<xsl:for-each select="./cfdi:Complemento"> <xsl:apply-templates select="./cfdi:Receptor"/>
<xsl:apply-templates select="."/> <xsl:apply-templates select="./cfdi:Conceptos"/>
</xsl:for-each> <xsl:apply-templates select="./cfdi:Impuestos"/>
</xsl:template> <xsl:for-each select="./cfdi:Complemento">
<xsl:apply-templates select="."/>
<!-- Manejador de nodos tipo CFDIRelacionados --> </xsl:for-each>
<xsl:template match="cfdi:CfdiRelacionados"> </xsl:template>
<!-- Iniciamos el tratamiento de los atributos del CFDIRelacionados -->
<xsl:call-template name="Requerido"> <!-- Manejador de nodos tipo InformacionGlobal -->
<xsl:with-param name="valor" select="./@TipoRelacion"/> <xsl:template match="cfdi:InformacionGlobal">
</xsl:call-template> <!-- Iniciamos el tratamiento de los atributos del nodo tipo InformacionGlobal -->
<xsl:for-each select="./cfdi:CfdiRelacionado"> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Periodicidad"/>
<xsl:with-param name="valor" select="./@UUID"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
</xsl:for-each> <xsl:with-param name="valor" select="./@Meses"/>
</xsl:template> </xsl:call-template>
<xsl:call-template name="Requerido">
<!-- Manejador de nodos tipo Emisor --> <xsl:with-param name="valor" select="./@Año"/>
<xsl:template match="cfdi:Emisor"> </xsl:call-template>
<!-- Iniciamos el tratamiento de los atributos del Emisor --> </xsl:template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Rfc"/> <!-- Manejador de nodos tipo CFDIRelacionados -->
</xsl:call-template> <xsl:template match="cfdi:CfdiRelacionados">
<xsl:call-template name="Opcional"> <!-- Iniciamos el tratamiento de los atributos del nodo tipo CFDIRelacionados -->
<xsl:with-param name="valor" select="./@Nombre"/> <xsl:call-template name="Requerido">
</xsl:call-template> <xsl:with-param name="valor" select="./@TipoRelacion"/>
<xsl:call-template name="Requerido"> </xsl:call-template>
<xsl:with-param name="valor" select="./@RegimenFiscal"/> <xsl:for-each select="./cfdi:CfdiRelacionado">
</xsl:call-template> <xsl:call-template name="Requerido">
</xsl:template> <xsl:with-param name="valor" select="./@UUID"/>
</xsl:call-template>
<!-- Manejador de nodos tipo Receptor --> </xsl:for-each>
<xsl:template match="cfdi:Receptor"> </xsl:template>
<!-- Iniciamos el tratamiento de los atributos del Receptor -->
<xsl:call-template name="Requerido"> <!-- Manejador de nodos tipo Emisor -->
<xsl:with-param name="valor" select="./@Rfc"/> <xsl:template match="cfdi:Emisor">
</xsl:call-template> <!-- Iniciamos el tratamiento de los atributos del nodo tipo Emisor -->
<xsl:call-template name="Opcional"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Nombre"/> <xsl:with-param name="valor" select="./@Rfc"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Opcional"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ResidenciaFiscal"/> <xsl:with-param name="valor" select="./@Nombre"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Opcional"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@NumRegIdTrib"/> <xsl:with-param name="valor" select="./@RegimenFiscal"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Requerido"> <xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@UsoCFDI"/> <xsl:with-param name="valor" select="./@FacAtrAdquirente"/>
</xsl:call-template> </xsl:call-template>
</xsl:template>
</xsl:template>
<!-- Manejador de nodos tipo Receptor -->
<!-- Manejador de nodos tipo Conceptos --> <xsl:template match="cfdi:Receptor">
<xsl:template match="cfdi:Conceptos"> <!-- Iniciamos el tratamiento de los atributos del nodo tipo Receptor -->
<!-- Llamada para procesar los distintos nodos tipo Concepto --> <xsl:call-template name="Requerido">
<xsl:for-each select="./cfdi:Concepto"> <xsl:with-param name="valor" select="./@Rfc"/>
<xsl:apply-templates select="."/> </xsl:call-template>
</xsl:for-each> <xsl:call-template name="Requerido">
</xsl:template> <xsl:with-param name="valor" select="./@Nombre"/>
</xsl:call-template>
<!--Manejador de nodos tipo Concepto--> <xsl:call-template name="Requerido">
<xsl:template match="cfdi:Concepto"> <xsl:with-param name="valor" select="./@DomicilioFiscalReceptor"/>
<!-- Iniciamos el tratamiento de los atributos del Concepto --> </xsl:call-template>
<xsl:call-template name="Requerido"> <xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@ClaveProdServ"/> <xsl:with-param name="valor" select="./@ResidenciaFiscal"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Opcional"> <xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@NoIdentificacion"/> <xsl:with-param name="valor" select="./@NumRegIdTrib"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Requerido"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Cantidad"/> <xsl:with-param name="valor" select="./@RegimenFiscalReceptor"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Requerido"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ClaveUnidad"/> <xsl:with-param name="valor" select="./@UsoCFDI"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Unidad"/> </xsl:template>
</xsl:call-template>
<xsl:call-template name="Requerido"> <!-- Manejador de nodos tipo Conceptos -->
<xsl:with-param name="valor" select="./@Descripcion"/> <xsl:template match="cfdi:Conceptos">
</xsl:call-template> <!-- Llamada para procesar los distintos nodos tipo Concepto -->
<xsl:call-template name="Requerido"> <xsl:for-each select="./cfdi:Concepto">
<xsl:with-param name="valor" select="./@ValorUnitario"/> <xsl:apply-templates select="."/>
</xsl:call-template> </xsl:for-each>
<xsl:call-template name="Requerido"> </xsl:template>
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template> <!--Manejador de nodos tipo Concepto-->
<xsl:call-template name="Opcional"> <xsl:template match="cfdi:Concepto">
<xsl:with-param name="valor" select="./@Descuento"/> <!-- Iniciamos el tratamiento de los atributos del Concepto -->
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
<!-- Manejo de sub nodos de información Traslado de Conceptos:Concepto:Impuestos:Traslados--> </xsl:call-template>
<xsl:for-each select="./cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado"> <xsl:call-template name="Opcional">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@NoIdentificacion"/>
<xsl:with-param name="valor" select="./@Base"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Cantidad"/>
<xsl:with-param name="valor" select="./@Impuesto"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@ClaveUnidad"/>
<xsl:with-param name="valor" select="./@TipoFactor"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@Unidad"/>
<xsl:with-param name="valor" select="./@TasaOCuota"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Opcional"> <xsl:with-param name="valor" select="./@Descripcion"/>
<xsl:with-param name="valor" select="./@Importe"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
</xsl:for-each> <xsl:with-param name="valor" select="./@ValorUnitario"/>
</xsl:call-template>
<!-- Manejo de sub nodos de Retencion por cada una de los Conceptos:Concepto:Impuestos:Retenciones--> <xsl:call-template name="Requerido">
<xsl:for-each select="./cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion"> <xsl:with-param name="valor" select="./@Importe"/>
<xsl:call-template name="Requerido"> </xsl:call-template>
<xsl:with-param name="valor" select="./@Base"/> <xsl:call-template name="Opcional">
</xsl:call-template> <xsl:with-param name="valor" select="./@Descuento"/>
<xsl:call-template name="Requerido"> </xsl:call-template>
<xsl:with-param name="valor" select="./@Impuesto"/> <xsl:call-template name="Requerido">
</xsl:call-template> <xsl:with-param name="valor" select="./@ObjetoImp"/>
<xsl:call-template name="Requerido"> </xsl:call-template>
<xsl:with-param name="valor" select="./@TipoFactor"/>
</xsl:call-template> <!-- Manejo de sub nodos de información Traslado de Conceptos:Concepto:Impuestos:Traslados-->
<xsl:call-template name="Requerido"> <xsl:for-each select="./cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado">
<xsl:with-param name="valor" select="./@TasaOCuota"/> <xsl:call-template name="Requerido">
</xsl:call-template> <xsl:with-param name="valor" select="./@Base"/>
<xsl:call-template name="Requerido"> </xsl:call-template>
<xsl:with-param name="valor" select="./@Importe"/> <xsl:call-template name="Requerido">
</xsl:call-template> <xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:for-each> </xsl:call-template>
<xsl:call-template name="Requerido">
<!-- Manejo de los distintos sub nodos de información aduanera de forma indistinta a su grado de dependencia --> <xsl:with-param name="valor" select="./@TipoFactor"/>
<xsl:for-each select="./cfdi:InformacionAduanera"> </xsl:call-template>
<xsl:apply-templates select="."/> <xsl:call-template name="Opcional">
</xsl:for-each> <xsl:with-param name="valor" select="./@TasaOCuota"/>
</xsl:call-template>
<!-- Llamada al manejador de nodos de CuentaPredial en caso de existir --> <xsl:call-template name="Opcional">
<xsl:if test="./cfdi:CuentaPredial"> <xsl:with-param name="valor" select="./@Importe"/>
<xsl:apply-templates select="./cfdi:CuentaPredial"/> </xsl:call-template>
</xsl:if> </xsl:for-each>
<!-- Llamada al manejador de nodos de ComplementoConcepto en caso de existir --> <!-- Manejo de sub nodos de Retencion por cada una de los Conceptos:Concepto:Impuestos:Retenciones-->
<xsl:if test="./cfdi:ComplementoConcepto"> <xsl:for-each select="./cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion">
<xsl:apply-templates select="./cfdi:ComplementoConcepto"/> <xsl:call-template name="Requerido">
</xsl:if> <xsl:with-param name="valor" select="./@Base"/>
</xsl:call-template>
<!-- Llamada al manejador de nodos de Parte en caso de existir --> <xsl:call-template name="Requerido">
<xsl:for-each select=".//cfdi:Parte"> <xsl:with-param name="valor" select="./@Impuesto"/>
<xsl:apply-templates select="."/> </xsl:call-template>
</xsl:for-each> <xsl:call-template name="Requerido">
</xsl:template> <xsl:with-param name="valor" select="./@TipoFactor"/>
</xsl:call-template>
<!-- Manejador de nodos tipo Información Aduanera --> <xsl:call-template name="Requerido">
<xsl:template match="cfdi:InformacionAduanera"> <xsl:with-param name="valor" select="./@TasaOCuota"/>
<!-- Manejo de los atributos de la información aduanera --> </xsl:call-template>
<xsl:call-template name="Requerido"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@NumeroPedimento"/> <xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template> </xsl:call-template>
</xsl:template> </xsl:for-each>
<!-- Manejador de nodos tipo Información CuentaPredial --> <!-- Manejo de los distintos sub nodos a cuenta de terceros de forma indistinta a su grado de dependencia -->
<xsl:template match="cfdi:CuentaPredial"> <xsl:for-each select="./cfdi:ACuentaTerceros">
<xsl:call-template name="Requerido"> <xsl:apply-templates select="."/>
<xsl:with-param name="valor" select="./@Numero"/> </xsl:for-each>
</xsl:call-template>
</xsl:template> <!-- Manejo de los distintos sub nodos de información aduanera de forma indistinta a su grado de dependencia -->
<xsl:for-each select="./cfdi:InformacionAduanera">
<!-- Manejador de nodos tipo ComplementoConcepto --> <xsl:apply-templates select="."/>
<xsl:template match="cfdi:ComplementoConcepto"> </xsl:for-each>
<xsl:for-each select="./*">
<xsl:apply-templates select="."/> <!-- Llamada al manejador de nodos de CuentaPredial en caso de existir -->
</xsl:for-each> <xsl:if test="./cfdi:CuentaPredial">
</xsl:template> <xsl:apply-templates select="./cfdi:CuentaPredial"/>
</xsl:if>
<!-- Manejador de nodos tipo Parte -->
<xsl:template match="cfdi:Parte"> <!-- Llamada al manejador de nodos de ComplementoConcepto en caso de existir -->
<!-- Iniciamos el tratamiento de los atributos de Parte--> <xsl:if test="./cfdi:ComplementoConcepto">
<xsl:call-template name="Requerido"> <xsl:apply-templates select="./cfdi:ComplementoConcepto"/>
<xsl:with-param name="valor" select="./@ClaveProdServ"/> </xsl:if>
</xsl:call-template>
<xsl:call-template name="Opcional"> <!-- Llamada al manejador de nodos de Parte en caso de existir -->
<xsl:with-param name="valor" select="./@NoIdentificacion"/> <xsl:for-each select=".//cfdi:Parte">
</xsl:call-template> <xsl:apply-templates select="."/>
<xsl:call-template name="Requerido"> </xsl:for-each>
<xsl:with-param name="valor" select="./@Cantidad"/> </xsl:template>
</xsl:call-template>
<xsl:call-template name="Opcional"> <!-- Manejador de nodos tipo ACuentaTerceros -->
<xsl:with-param name="valor" select="./@Unidad"/> <xsl:template match="cfdi:ACuentaTerceros">
</xsl:call-template> <!-- Manejo de los atributos del nodo tipo ACuentaTerceros -->
<xsl:call-template name="Requerido"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Descripcion"/> <xsl:with-param name="valor" select="./@RfcACuentaTerceros"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Opcional"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ValorUnitario"/> <xsl:with-param name="valor" select="./@NombreACuentaTerceros"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Opcional"> <xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Importe"/> <xsl:with-param name="valor" select="./@RegimenFiscalACuentaTerceros"/>
</xsl:call-template> </xsl:call-template>
<xsl:call-template name="Requerido">
<!-- Manejador de nodos tipo InformacionAduanera--> <xsl:with-param name="valor" select="./@DomicilioFiscalACuentaTerceros"/>
<xsl:for-each select=".//cfdi:InformacionAduanera"> </xsl:call-template>
<xsl:apply-templates select="."/> </xsl:template>
</xsl:for-each>
</xsl:template> <!-- Manejador de nodos tipo Información Aduanera -->
<xsl:template match="cfdi:InformacionAduanera">
<!-- Manejador de nodos tipo Complemento --> <!-- Manejo de los atributos de la información aduanera -->
<xsl:template match="cfdi:Complemento"> <xsl:call-template name="Requerido">
<xsl:for-each select="./*"> <xsl:with-param name="valor" select="./@NumeroPedimento"/>
<xsl:apply-templates select="."/> </xsl:call-template>
</xsl:for-each> </xsl:template>
</xsl:template>
<!-- Manejador de nodos tipo Información CuentaPredial -->
<!-- Manejador de nodos tipo Domicilio fiscal --> <xsl:template match="cfdi:CuentaPredial">
<xsl:template match="cfdi:Impuestos"> <xsl:call-template name="Requerido">
<!-- Manejo de sub nodos de Retencion por cada una de los Impuestos:Retenciones--> <xsl:with-param name="valor" select="./@Numero"/>
<xsl:for-each select="./cfdi:Retenciones/cfdi:Retencion"> </xsl:call-template>
<xsl:call-template name="Requerido"> </xsl:template>
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template> <!-- Manejador de nodos tipo ComplementoConcepto -->
<xsl:call-template name="Requerido"> <xsl:template match="cfdi:ComplementoConcepto">
<xsl:with-param name="valor" select="./@Importe"/> <xsl:for-each select="./*">
</xsl:call-template> <xsl:apply-templates select="."/>
</xsl:for-each> </xsl:for-each>
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosRetenidos--> </xsl:template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TotalImpuestosRetenidos"/> <!-- Manejador de nodos tipo Parte -->
</xsl:call-template> <xsl:template match="cfdi:Parte">
<!-- Manejo de sub nodos de información Traslado de Impuestos:Traslados--> <!-- Iniciamos el tratamiento de los atributos de Parte-->
<xsl:for-each select="./cfdi:Traslados/cfdi:Traslado"> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@ClaveProdServ"/>
<xsl:with-param name="valor" select="./@Impuesto"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@NoIdentificacion"/>
<xsl:with-param name="valor" select="./@TipoFactor"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Cantidad"/>
<xsl:with-param name="valor" select="./@TasaOCuota"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Opcional">
<xsl:call-template name="Requerido"> <xsl:with-param name="valor" select="./@Unidad"/>
<xsl:with-param name="valor" select="./@Importe"/> </xsl:call-template>
</xsl:call-template> <xsl:call-template name="Requerido">
</xsl:for-each> <xsl:with-param name="valor" select="./@Descripcion"/>
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosTrasladados--> </xsl:call-template>
<xsl:call-template name="Opcional"> <xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TotalImpuestosTrasladados"/> <xsl:with-param name="valor" select="./@ValorUnitario"/>
</xsl:call-template> </xsl:call-template>
</xsl:template> <xsl:call-template name="Opcional">
</xsl:stylesheet> <xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
<!-- Manejador de nodos tipo InformacionAduanera-->
<xsl:for-each select=".//cfdi:InformacionAduanera">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Complemento -->
<xsl:template match="cfdi:Complemento">
<xsl:for-each select="./*">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Domicilio fiscal -->
<xsl:template match="cfdi:Impuestos">
<!-- Manejo de sub nodos de Retencion por cada una de los Impuestos:Retenciones-->
<xsl:for-each select="./cfdi:Retenciones/cfdi:Retencion">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
</xsl:for-each>
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosRetenidos-->
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TotalImpuestosRetenidos"/>
</xsl:call-template>
<!-- Manejo de sub nodos de información Traslado de Impuestos:Traslados-->
<xsl:for-each select="./cfdi:Traslados/cfdi:Traslado">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Base"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TipoFactor"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TasaOCuota"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
</xsl:for-each>
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosTrasladados-->
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TotalImpuestosTrasladados"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>

347
source/xslt/cadena3.3.xslt Normal file
View File

@ -0,0 +1,347 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11" xmlns:donat="http://www.sat.gob.mx/donat" xmlns:divisas="http://www.sat.gob.mx/divisas" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales" xmlns:pfic="http://www.sat.gob.mx/pfic" xmlns:tpe="http://www.sat.gob.mx/TuristaPasajeroExtranjero" xmlns:nomina12="http://www.sat.gob.mx/nomina12" xmlns:registrofiscal="http://www.sat.gob.mx/registrofiscal" xmlns:pagoenespecie="http://www.sat.gob.mx/pagoenespecie" xmlns:aerolineas="http://www.sat.gob.mx/aerolineas" xmlns:valesdedespensa="http://www.sat.gob.mx/valesdedespensa" xmlns:consumodecombustibles="http://www.sat.gob.mx/consumodecombustibles" xmlns:notariospublicos="http://www.sat.gob.mx/notariospublicos" xmlns:vehiculousado="http://www.sat.gob.mx/vehiculousado" xmlns:servicioparcial="http://www.sat.gob.mx/servicioparcialconstruccion" xmlns:decreto="http://www.sat.gob.mx/renovacionysustitucionvehiculos" xmlns:destruccion="http://www.sat.gob.mx/certificadodestruccion" xmlns:obrasarte="http://www.sat.gob.mx/arteantiguedades" xmlns:ine="http://www.sat.gob.mx/ine" xmlns:iedu="http://www.sat.gob.mx/iedu" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos" xmlns:terceros="http://www.sat.gob.mx/terceros" xmlns:pago10="http://www.sat.gob.mx/Pagos">
<!-- Con el siguiente método se establece que la salida deberá ser en texto -->
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:include href="utilerias.xslt"/>
<xsl:include href="comercioexterior11.xslt"/>
<xsl:include href="leyendasFisc.xslt"/>
<xsl:include href="nomina12.xslt"/>
<xsl:include href="implocal.xslt"/>
<xsl:include href="donat11.xslt"/>
<xsl:include href="ine11.xslt"/>
<xsl:include href="iedu.xslt"/>
<xsl:include href="pagos10.xslt"/>
<xsl:include href="divisas.xslt"/>
<xsl:include href="servicioconstruccion.xslt"/>
<xsl:include href="cartaporte20.xslt"/>
<!--
<xsl:include href="ecc11.xslt"/>
<xsl:include href="pfic.xslt"/>
<xsl:include href="TuristaPasajeroExtranjero.xslt"/>
<xsl:include href="cfdiregistrofiscal.xslt"/>
<xsl:include href="pagoenespecie.xslt"/>
<xsl:include href="aerolineas.xslt"/>
<xsl:include href="valesdedespensa.xslt"/>
<xsl:include href="consumodecombustibles.xslt"/>
<xsl:include href="notariospublicos.xslt"/>
<xsl:include href="vehiculousado.xslt"/>
<xsl:include href="servicioparcialconstruccion.xslt"/>
<xsl:include href="renovacionysustitucionvehiculos.xslt"/>
<xsl:include href="certificadodedestruccion.xslt"/>
<xsl:include href="obrasarteantiguedades.xslt"/>
<xsl:include href="ventavehiculos11.xslt"/>
<xsl:include href="terceros11.xslt"/>
-->
<!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || -->
<xsl:template match="/">|<xsl:apply-templates select="/cfdi:Comprobante"/>||</xsl:template>
<!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante -->
<xsl:template match="cfdi:Comprobante">
<!-- Iniciamos el tratamiento de los atributos de comprobante -->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Version"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Serie"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Folio"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Fecha"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@FormaPago"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@NoCertificado"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@CondicionesDePago"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@SubTotal"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Descuento"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Moneda"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TipoCambio"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Total"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TipoDeComprobante"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@MetodoPago"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@LugarExpedicion"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Confirmacion"/>
</xsl:call-template>
<!--
Llamadas para procesar al los sub nodos del comprobante
-->
<xsl:apply-templates select="./cfdi:CfdiRelacionados"/>
<xsl:apply-templates select="./cfdi:Emisor"/>
<xsl:apply-templates select="./cfdi:Receptor"/>
<xsl:apply-templates select="./cfdi:Conceptos"/>
<xsl:apply-templates select="./cfdi:Impuestos"/>
<xsl:for-each select="./cfdi:Complemento">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo CFDIRelacionados -->
<xsl:template match="cfdi:CfdiRelacionados">
<!-- Iniciamos el tratamiento de los atributos del CFDIRelacionados -->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TipoRelacion"/>
</xsl:call-template>
<xsl:for-each select="./cfdi:CfdiRelacionado">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@UUID"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Emisor -->
<xsl:template match="cfdi:Emisor">
<!-- Iniciamos el tratamiento de los atributos del Emisor -->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Rfc"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Nombre"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@RegimenFiscal"/>
</xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo Receptor -->
<xsl:template match="cfdi:Receptor">
<!-- Iniciamos el tratamiento de los atributos del Receptor -->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Rfc"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Nombre"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@ResidenciaFiscal"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@NumRegIdTrib"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@UsoCFDI"/>
</xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo Conceptos -->
<xsl:template match="cfdi:Conceptos">
<!-- Llamada para procesar los distintos nodos tipo Concepto -->
<xsl:for-each select="./cfdi:Concepto">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!--Manejador de nodos tipo Concepto-->
<xsl:template match="cfdi:Concepto">
<!-- Iniciamos el tratamiento de los atributos del Concepto -->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@NoIdentificacion"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Cantidad"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ClaveUnidad"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Unidad"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Descripcion"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ValorUnitario"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Descuento"/>
</xsl:call-template>
<!-- Manejo de sub nodos de información Traslado de Conceptos:Concepto:Impuestos:Traslados-->
<xsl:for-each select="./cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Base"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TipoFactor"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TasaOCuota"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
</xsl:for-each>
<!-- Manejo de sub nodos de Retencion por cada una de los Conceptos:Concepto:Impuestos:Retenciones-->
<xsl:for-each select="./cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Base"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TipoFactor"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TasaOCuota"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
</xsl:for-each>
<!-- Manejo de los distintos sub nodos de información aduanera de forma indistinta a su grado de dependencia -->
<xsl:for-each select="./cfdi:InformacionAduanera">
<xsl:apply-templates select="."/>
</xsl:for-each>
<!-- Llamada al manejador de nodos de CuentaPredial en caso de existir -->
<xsl:if test="./cfdi:CuentaPredial">
<xsl:apply-templates select="./cfdi:CuentaPredial"/>
</xsl:if>
<!-- Llamada al manejador de nodos de ComplementoConcepto en caso de existir -->
<xsl:if test="./cfdi:ComplementoConcepto">
<xsl:apply-templates select="./cfdi:ComplementoConcepto"/>
</xsl:if>
<!-- Llamada al manejador de nodos de Parte en caso de existir -->
<xsl:for-each select=".//cfdi:Parte">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Información Aduanera -->
<xsl:template match="cfdi:InformacionAduanera">
<!-- Manejo de los atributos de la información aduanera -->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@NumeroPedimento"/>
</xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo Información CuentaPredial -->
<xsl:template match="cfdi:CuentaPredial">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Numero"/>
</xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo ComplementoConcepto -->
<xsl:template match="cfdi:ComplementoConcepto">
<xsl:for-each select="./*">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Parte -->
<xsl:template match="cfdi:Parte">
<!-- Iniciamos el tratamiento de los atributos de Parte-->
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@NoIdentificacion"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Cantidad"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Unidad"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Descripcion"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@ValorUnitario"/>
</xsl:call-template>
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
<!-- Manejador de nodos tipo InformacionAduanera-->
<xsl:for-each select=".//cfdi:InformacionAduanera">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Complemento -->
<xsl:template match="cfdi:Complemento">
<xsl:for-each select="./*">
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Domicilio fiscal -->
<xsl:template match="cfdi:Impuestos">
<!-- Manejo de sub nodos de Retencion por cada una de los Impuestos:Retenciones-->
<xsl:for-each select="./cfdi:Retenciones/cfdi:Retencion">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
</xsl:for-each>
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosRetenidos-->
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TotalImpuestosRetenidos"/>
</xsl:call-template>
<!-- Manejo de sub nodos de información Traslado de Impuestos:Traslados-->
<xsl:for-each select="./cfdi:Traslados/cfdi:Traslado">
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Impuesto"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TipoFactor"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@TasaOCuota"/>
</xsl:call-template>
<xsl:call-template name="Requerido">
<xsl:with-param name="valor" select="./@Importe"/>
</xsl:call-template>
</xsl:for-each>
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosTrasladados-->
<xsl:call-template name="Opcional">
<xsl:with-param name="valor" select="./@TotalImpuestosTrasladados"/>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- Manejador de datos requeridos --> <!-- Manejador de datos requeridos -->
<xsl:template name="Requerido"> <xsl:template name="Requerido">
<xsl:param name="valor"/>|<xsl:call-template name="ManejaEspacios"> <xsl:param name="valor"/>|<xsl:call-template name="ManejaEspacios">
<xsl:with-param name="s" select="$valor"/> <xsl:with-param name="s" select="$valor"/>
</xsl:call-template> </xsl:call-template>
</xsl:template> </xsl:template>
<!-- Manejador de datos opcionales --> <!-- Manejador de datos opcionales -->
<xsl:template name="Opcional"> <xsl:template name="Opcional">
<xsl:param name="valor"/> <xsl:param name="valor"/>
<xsl:if test="$valor">|<xsl:call-template name="ManejaEspacios"><xsl:with-param name="s" select="$valor"/></xsl:call-template></xsl:if> <xsl:if test="$valor">|<xsl:call-template name="ManejaEspacios"><xsl:with-param name="s" select="$valor"/></xsl:call-template></xsl:if>
</xsl:template> </xsl:template>
<!-- Normalizador de espacios en blanco --> <!-- Normalizador de espacios en blanco -->
<xsl:template name="ManejaEspacios"> <xsl:template name="ManejaEspacios">
<xsl:param name="s"/> <xsl:param name="s"/>
<xsl:value-of select="normalize-space(string($s))"/> <xsl:value-of select="normalize-space(string($s))"/>
</xsl:template> </xsl:template>
</xsl:stylesheet> </xsl:stylesheet>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<!-- Manejador de datos requeridos -->
<xsl:template name="Requerido">
<xsl:param name="valor"/>|<xsl:call-template name="ManejaEspacios">
<xsl:with-param name="s" select="$valor"/>
</xsl:call-template>
</xsl:template>
<!-- Manejador de datos opcionales -->
<xsl:template name="Opcional">
<xsl:param name="valor"/>
<xsl:if test="$valor">|<xsl:call-template name="ManejaEspacios"><xsl:with-param name="s" select="$valor"/></xsl:call-template></xsl:if>
</xsl:template>
<!-- Normalizador de espacios en blanco -->
<xsl:template name="ManejaEspacios">
<xsl:param name="s"/>
<xsl:value-of select="normalize-space(string($s))"/>
</xsl:template>
</xsl:stylesheet>