<?xml version=“1.0” encoding=“UTF-8”?> <xsl:stylesheet version=“1.0” xmlns:xsl=“www.w3.org/1999/XSL/Transform” xmlns:xs=“www.w3.org/2001/XMLSchema” xmlns:fn=“www.w3.org/2005/xpath-functions” xmlns:terceros=“www.sat.gob.mx/terceros”>

<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
<!-- Manejador de nodos tipo PorCuentadeTerceros -->
<xsl:template match="terceros:PorCuentadeTerceros">
        <!--Iniciamos el tratamiento de los atributos del complemento concepto Por cuenta de Terceros -->
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@version"/>
        </xsl:call-template>
        <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>
        <!--Iniciamos el tratamiento de los atributos de la información fiscal del complemento de terceros -->
        <xsl:apply-templates select=".//terceros:InformacionFiscalTercero"/>
        <!-- Manejo de los atributos de la información aduanera del complemento de terceros -->
        <xsl:for-each select=".//terceros:InformacionAduanera">
                <xsl:apply-templates select="."/>
        </xsl:for-each>
        <!-- Manejo de los atributos de la cuenta predial del complento de terceros -->
        <xsl:if test="./terceros:CuentaPredial">
                <xsl:apply-templates select="./terceros:CuentaPredial"/>
        </xsl:if>
        <!-- Manejador de nodos tipo Impuestos-->
        <xsl:for-each select=".//terceros:Retenciones/terceros:Retencion">
                <xsl:apply-templates select="."/>
        </xsl:for-each>
        <xsl:for-each select=".//terceros:Traslados/terceros:Traslado">
                <xsl:apply-templates select="."/>
        </xsl:for-each>
</xsl:template>
<!-- Manejador de nodos tipo Retencion -->
<xsl:template match="terceros: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:template>
<!-- Manejador de nodos tipo Traslado -->
<xsl:template match="terceros: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="./@tasa"/>
        </xsl:call-template>
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@importe"/>
        </xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo Información Aduanera -->
<xsl:template match="terceros:InformacionAduanera">
        <!-- Manejo de los atributos de la información aduanera -->
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@numero"/>
        </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="./@aduana"/>
        </xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo Información CuentaPredial -->
<xsl:template match="terceros:CuentaPredial">
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@numero"/>
        </xsl:call-template>
</xsl:template>
<!-- Manejador de nodos tipo Domicilio fiscal -->
<xsl:template match="terceros:InformacionFiscalTercero">
        <!-- Iniciamos el tratamiento de los atributos del Domicilio Fiscal -->
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@calle"/>
        </xsl:call-template>
        <xsl:call-template name="Opcional">
                <xsl:with-param name="valor" select="./@noExterior"/>
        </xsl:call-template>
        <xsl:call-template name="Opcional">
                <xsl:with-param name="valor" select="./@noInterior"/>
        </xsl:call-template>
        <xsl:call-template name="Opcional">
                <xsl:with-param name="valor" select="./@colonia"/>
        </xsl:call-template>
        <xsl:call-template name="Opcional">
                <xsl:with-param name="valor" select="./@localidad"/>
        </xsl:call-template>
        <xsl:call-template name="Opcional">
                <xsl:with-param name="valor" select="./@referencia"/>
        </xsl:call-template>
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@municipio"/>
        </xsl:call-template>
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@estado"/>
        </xsl:call-template>
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@pais"/>
        </xsl:call-template>
        <xsl:call-template name="Requerido">
                <xsl:with-param name="valor" select="./@codigoPostal"/>
        </xsl:call-template>
</xsl:template>

</xsl:stylesheet>