从XML检查版本后,应用不同的XSLT

  • 本文关键字:应用 XSLT XML 版本 xml xslt
  • 更新时间 :
  • 英文 :


我正在使用两个不同的XML版本(3.2。和3.3。)

XML版本3.3该版本可以使用Attibute CFDI验证:Comprobante/@version

<cfdi:Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd" LugarExpedicion="42084" MetodoPago="PUE" TipoDeComprobante="I" Total="28614.88" Moneda="MXN" Certificado="MIIE3TCCA8WgAwIBAgIUMDAwMDEwMDAwMDAzMDI2NTUzMDYwDQYJKoZIhvcNAQEFBQAwggGKMTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMR8wHQYJKoZIhvcNAQkBFhBhY29kc0BzYXQuZ29iLm14MSYwJAYDVQQJDB1Bdi4gSGlkYWxnbyA3NywgQ29sLiBHdWVycmVybzEOMAwGA1UEEQwFMDYzMDAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBEaXN0cml0byBGZWRlcmFsMRQwEgYDVQQHDAtDdWF1aHTDqW1vYzEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTUwMwYJKoZIhvcNAQkCDCZSZXNwb25zYWJsZTogQ2xhdWRpYSBDb3ZhcnJ1YmlhcyBPY2hvYTAeFw0xNDAxMjcxODE0MDRaFw0xODAxMjcxODE0NDRaMIHTMSEwHwYDVQQDExhFREdBUiBIRVJOQU5ERVogU0FORE9WQUwxITAfBgNVBCkTGEVER0FSIEhFUk5BTkRFWiBTQU5ET1ZBTDEhMB8GA1UEChMYRURHQVIgSEVSTkFOREVaIFNBTkRPVkFMMQswCQYDVQQGEwJNWDEmMCQGCSqGSIb3DQEJARYXZWpjaGVybWFub3NAaG90bWFpbC5jb20xFjAUBgNVBC0TDUhFU0U2OTAxMDlOMjAxGzAZBgNVBAUTEkhFU0U2OTAxMDlIREZSTkQwMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqTMS8xCEw1R9E4UZdRx3yZqSyYY+TTbDm2tYzhDcXTsWalEbQ5l3n94BURTweKmd0ZEiVhxMq/tnTRPXOA8rNy6zO3N4E1Fqj1AgoRLp6hzqmbmaRrSAatrtruoAFGzi7bon2ZTU+amm586+CzlS8SlpC99A1b+JbQdSshta7I8CAwEAAaNzMHEwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCA9gwEQYJYIZIAYb4QgEBBAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcDAjAiBgNVHREEGzAZgRdlamNoZXJtYW5vc0Bob3RtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAjTRb1O2krjcfIsPSErfLG6hY5qgDT2zfGrEWiwpPOkS62Sg8UDtAqlHyIFU9My84V9F0ifCeEztGnIA19RVuWriHe/VGQQ1IEbQD80KDKwT0/nml7oez9La5MNVmZk8UrcIuUXKoS4F2BXscvJ2/5UXnXbws6VroJaYN55kIXtZBDQX6tZGDKTtBBxvNdlZ/aMazzg8tIax+NlbTZ8jmggZe/rEncQW66Gc0KyEg6/D2HrCpqGVH7YXoA1TXXhGqQVqyh/3Pl2Yd934HN0vIIeM9Ru3PX2ipMHdIdlHbJJWjOenP5ZxX+n2pFw+fZW9w+CcQJZ5tec/3Eq4q2V+/IQ==" SubTotal="24668.00" NoCertificado="00001000000302655306" FormaPago="03" Sello="X/gOMJbMUDM0hA82um9ZYw09JMtPYs90U9ZqYHqYxLwOSoW66Aj3aIgQkzzvmD8O2JkTBJiAihQYW2tc9gL7IJEBQF+dnfO88ypX5b4ScOI57zMY1/pw8iyh5e7XRD3raLsgG0OnU9m53fvy68fbovxB+xYq8nPKhHbQZWgu9qc=" Fecha="2017-08-21T13:29:41" Folio="121" Serie="A" Version="3.3" xmlns:cfdi="http://www.sat.gob.mx/cfd/3">
  <cfdi:Emisor Rfc="rfc" Nombre="nombre" RegimenFiscal="621" />
  <cfdi:Receptor Rfc="rfc" Nombre="nombre" UsoCFDI="G03" />
  <cfdi:Conceptos>
    <cfdi:Concepto ClaveProdServ="60122604" Cantidad="28" ClaveUnidad="EA" Unidad="pieza" Descripcion="descripcion" ValorUnitario="881.00" Importe="24668.00">
      <cfdi:Impuestos>
        <cfdi:Traslados>
          <cfdi:Traslado Base="24668.00" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="3946.88" />
        </cfdi:Traslados>
      </cfdi:Impuestos>
    </cfdi:Concepto>
  </cfdi:Conceptos>
  <cfdi:Impuestos TotalImpuestosTrasladados="3946.88">
    <cfdi:Traslados>
      <cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="3946.88" />
    </cfdi:Traslados>
  </cfdi:Impuestos>
  <cfdi:Complemento>
    <tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd" Version="1.1" UUID="UUID" FechaTimbrado="2017-08-21T13:46:18" RfcProvCertif="SAT970701NN3" SelloCFD="X/gOMJbMUDM0hA82um9ZYw09JMtPYs90U9ZqYHqYxLwOSoW66Aj3aIgQkzzvmD8O2JkTBJiAihQYW2tc9gL7IJEBQF+dnfO88ypX5b4ScOI57zMY1/pw8iyh5e7XRD3raLsgG0OnU9m53fvy68fbovxB+xYq8nPKhHbQZWgu9qc=" NoCertificadoSAT="00001000000403258748" SelloSAT="C02d7c5PA4OBqpR0+qxjpQkdn4io1BTetRNqWEzvlAvhYvCNheZ9bGtQZYUyMu+cWvVIIRZ7zhcdjt+vZby6EYdF98Fz4l7OwIHVWV7fu0PRzU9uJRblJB9rMRe+ByZNFJ8HYswbsCIuNhjO1dND4VxMzwEIIaJGQ6iHQyMmHwGElx0z1KVBdnKVsADgcIudufoE9lQ11jGt71tfv1iG4XA3z/Ft8bkalb8uoemQi0/2aKquf3HbhDioUzj4fq+eyZEadsIQAOtrkylFSQIZNl8Unp3PkNW3S7K5dodRvebSlgB/X82geiMKlWFVnGCBFC6yA5naNDn4HEegcrQzMA==" />
  </cfdi:Complemento>
</cfdi:Comprobante>

XML版本3.2。可以使用属性CFDI验证该版本:comprobante/@version

<cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" version="3.2" serie="C" folio="7365" LugarExpedicion="ELIAS ZAMORA VERDUZCO 28 , LA CIMA, 28800, EL COLOMO, MANZANILLO, COLIMA, MEXICO" TipoCambio="1.00" Moneda="Peso Mexicano" fecha="2017-07-04T13:11:56" sello="lroX3cWHMDs/no3RbEixX4940jTwJHaeA3wv5XyNi9tjKXlo9g7lPd4PWkQwwL3lD/e2YSDiP96wVTceKqZZvZtYf8TbtrprlcPCEog9e7/vLG2Ywc+WhXLqbR1bOXnpz9/aiEElYyFeay7AYSMbizhlpMfV4cRJWtY3yN2OSsY=" formaDePago="PAGO EN UNA SOLA EXHIBICION" noCertificado="00001000000301323317" certificado="MIIEczCCA1ugAwIBAgIUMDAwMDEwMDAwMDAzMDEzMjMzMTcwDQYJKoZIhvcNAQEFBQAwggGKMTgwNgYDVQQDDC9BLkMuIGRlbCBTZXJ2aWNpbyBkZSBBZG1pbmlzdHJhY2nDs24gVHJpYnV0YXJpYTEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMR8wHQYJKoZIhvcNAQkBFhBhY29kc0BzYXQuZ29iLm14MSYwJAYDVQQJDB1Bdi4gSGlkYWxnbyA3NywgQ29sLiBHdWVycmVybzEOMAwGA1UEEQwFMDYzMDAxCzAJBgNVBAYTAk1YMRkwFwYDVQQIDBBEaXN0cml0byBGZWRlcmFsMRQwEgYDVQQHDAtDdWF1aHTDqW1vYzEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTUwMwYJKoZIhvcNAQkCDCZSZXNwb25zYWJsZTogQ2xhdWRpYSBDb3ZhcnJ1YmlhcyBPY2hvYTAeFw0xMzExMTUxNzAwNTdaFw0xNzExMTUxNzAwNTdaMIG/MSIwIAYDVQQDExlUUkFOU1BPUlRFUyBTT0xPIFNBIERFIENWMSIwIAYDVQQpExlUUkFOU1BPUlRFUyBTT0xPIFNBIERFIENWMSIwIAYDVQQKExlUUkFOU1BPUlRFUyBTT0xPIFNBIERFIENWMSUwIwYDVQQtExxUU085OTAxMDdQVTEgLyBTT0xFNjgxMjE3NzEyMR4wHAYDVQQFExUgLyBTT0xFNjgxMjE3SENNVFBOMDcxCjAIBgNVBAsTAUUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKU+XvzLT/ZrzJjRAk/ozwQnuAJM+dI7eZeXVj9tjh0UglEk/P6zvx3XAEoeViozqDLLM67P0PBy+TeN1mHWz871lVhoZl2hHnUI3DHj0XQzb1lEhsILFZrM/vFyLC3h/FvJk9wrfCasLnDmd8fDnWyeE5zdGWgHDFnz7c6xo8ldAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQAkr+iQAhXLKD3dyVyHlgc491VzQg7+9G3p52PJ+etMZ9z9710IZbCJLm37RFxZk6tRiwWyb0vhJiYS8udWMHvMLM4FDO8v3JAfqBl0op7xHaW796TrpQAuB2JEb028I5Ko3O3xACTHr6qfh/RVYqOR+0vcjLLpmVLH3y8wqUcN6dQEhTUHYPTYAdN+/7Iz+r35mzqmChJcrlmIZb8vuF28Ad8eJcFmqc7cYN/7yKkx79ca8Xow1h1ebjBu739QIO7/xQWCWyc5HSrXKQ5Dbk3codIq8baTCndep0eyQywABm/an/w9u0DHNCsVvQXSepVeKCCkqoOZ9+2cqCzMyXZd" subTotal="52684.49" total="59154.01" metodoDePago="Transferencia Electronica" tipoDeComprobante="ingreso" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <cfdi:Emisor rfc="rfc" nombre="nombre">
        <cfdi:DomicilioFiscal calle="ELIAS ZAMORA VERDUZCO" noExterior="28" colonia="LA CIMA" localidad="MANZANILLO" municipio="EL COLOMO" estado="COLIMA" pais="MEXICO" codigoPostal="cp" />
        <cfdi:RegimenFiscal Regimen="REGIMEN GENERAL DE LEY PERSONAS MORALES" />
    </cfdi:Emisor>
    <cfdi:Receptor rfc="rfc" nombre="nombre">
        <cfdi:Domicilio calle="CIRCUITO  SAN FCO" noExterior="348" colonia="FRACC.RINCONADAS DE SAN FRANCISCO" localidad="HGO" municipio="MINERAL DE LA REFORMA" estado="HGO" pais="MEX" codigoPostal="cp" />
    </cfdi:Receptor>
    <cfdi:Conceptos>
        <cfdi:Concepto cantidad="1.00" unidad="No aplica" noIdentificacion="01" descripcion="FLETE" valorUnitario="49000.00" importe="49000.00" />
        <cfdi:Concepto cantidad="1.00" unidad="No aplica" noIdentificacion="02" descripcion="AUTOPISTAS&#xA;&#xA;2 X 40&quot; CONTS.NO. PCIU898114-5 / TCNU578696-3&#xA;&#xA;CON CARGA DE IMPORTACION&#xA;LIBRE DE MANIOBRAS PARA EL COND&#xA;FLETE POR COBRAR&#xA;PED.NO. 17 16 3724 7003271-0002&#xA;&#xA;OPERADOR. AARON CHAVEZ ARIAS&#xA;CHASIS. 072WR6 / 494UE6&#xA;&#xA;PESO. 23,068 KGS&#xA;&#xA;" valorUnitario="3684.49" importe="3684.49" />
    </cfdi:Conceptos>
    <cfdi:Impuestos totalImpuestosRetenidos="1960.00" totalImpuestosTrasladados="8429.52">
        <cfdi:Retenciones>
            <cfdi:Retencion impuesto="IVA" importe="1960.00" />
        </cfdi:Retenciones>
        <cfdi:Traslados>
            <cfdi:Traslado impuesto="IVA" tasa="16.00" importe="8429.52" />
        </cfdi:Traslados>
    </cfdi:Impuestos>
    <cfdi:Complemento>
        <tfd:TimbreFiscalDigital xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" version="1.0" UUID="886759D7-DC88-47DE-9B0E-61AC83DBF684" FechaTimbrado="2017-07-04T13:12:03" selloCFD="lroX3cWHMDs/no3RbEixX4940jTwJHaeA3wv5XyNi9tjKXlo9g7lPd4PWkQwwL3lD/e2YSDiP96wVTceKqZZvZtYf8TbtrprlcPCEog9e7/vLG2Ywc+WhXLqbR1bOXnpz9/aiEElYyFeay7AYSMbizhlpMfV4cRJWtY3yN2OSsY=" noCertificadoSAT="00001000000404486074" selloSAT="b5vOGY/QY6nyjKe3T2JcexP7pCVOarfdGgcWEAJ9ySbO85SY1RglM4Q1VO8rCGwgapzN80/FbhB1413YK1RZ/Bo5xUUYD6h5DFFTzoH+ChuDhQ/Pb6pJRbntEkqAbfFMegKTccdrhxbLA3kpihEKadcnT/pXrfgnCrNcaT/GpSQ5pwJwWGZq73Qo/dw68yEgz50f3gJzxczij5HYgDJZ3ChrIjgxYG6Vo0RohVQoQPvuMdksOX9Pd6WjxVj5JTyWPHaLC8Yvpt2tAtSf7LOD0jOGTXqhR8kAVhc2L6CpaPhJYF1N/P3X73mLqFBar0bZ3R8+XKBzJR+hzXEv3/DEgQ==" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
    </cfdi:Complemento>
</cfdi:Comprobante>

结构是相同的,但是属性和节点在版本3.2中会更改。在版本3.3中,节点处于小写字母。属性和节点以大写开头

我正在尝试制作一个样式表XSLT,以检查版本,然后通过XSL选择其他样式表:包括功能并应用正确的代码

我需要一些喜欢的

checkversion.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" 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" version="2.0">
    <xsl:output method="html"/>
    <xsl:template match="cfdi:Comprobante">
        <xsl:choose>
            <xsl:when test="@Version = '3.3'">
                <xsl:include href="version3.3.xsl"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:choose>
                    <xsl:when test="@version = '3.2'">
                        <xsl:include href="version3.2.xsl"/>
                    </xsl:when>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>       
    </xsl:template>
</xsl:stylesheet>

然后应用了与版本

相对应的XSLT

我的错误是我的错误或哪个是我情况的正确代码?输出显示3.2.xsl的"否则",当我需要选择3.3.xsl

输出checkversion.xsl

版本3.2.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="cfdi:Comprobante">               
        <xsl:choose>
            <xsl:when test="@tipoDeComprobante='ingreso'">
                <xsl:choose>
                    <xsl:when test="//cfdi:Retenciones/cfdi:Retencion/@impuesto = 'ISR'">
                        <xsl:value-of select="//cfdi:Emisor/@nombre"/>
                    </xsl:when>
                    <xsl:when test="//cfdi:Retenciones/cfdi:Retencion/@impuesto = 'IVA'">
                        <xsl:value-of select="//cfdi:Emisor/@rfc"/>
                    </xsl:when>
                    <xsl:otherwise>
                        Null
                    </xsl:otherwise>
                </xsl:choose>                                       
            </xsl:when>
            <xsl:otherwise>
                Null
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>    
</xsl:stylesheet>

版本3.3.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" version="1.0">
    <xsl:output method="html"/>  
    <xsl:template match="cfdi:Comprobante">             
        <xsl:choose>
            <xsl:when test="@TipoDeComprobante = 'I'">
                <xsl:value-of select="//cfdi:Emisor/@Rfc"/>                                 
            </xsl:when>
            <xsl:otherwise>
                null
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>    
</xsl:stylesheet>

如果我将代码直接应用于XML

,则两个输出都可以正常工作。

我对我的英语表示歉意,下次会更好

我编写必须处理两个类似词汇表的样式表的方法是进行2阶段的转换:阶段1通过将一个词汇转换为另一个词汇来使文档归一化,阶段2进行实际转换。这种方法的最大优势是重复使用:您最终不会复制代码。表现稍有罚款,但是除非事情真的很关键,否则不应该受到伤害。

另一种方法是从普通大师中生成两个样式表。由于XSLT是XML,因此特别适合代码生成技术。

如果您确实要坚持使用逻辑"如果版本=" x",然后应用转换t erse the应用转换u",那么我可能会在xslt之外执行此逻辑。考虑使用管道语言,例如Xproc或Ant。

最新更新