<?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:notariospublicos=“www.sat.gob.mx/notariospublicos”>

<!-- Manejador de nodos tipo notariospublicos:NotariosPublicos --> 
<xsl:template match="notariospublicos:NotariosPublicos">

  <!-- Iniciamos el tratamiento de los atributos -->    
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Version"/>
  </xsl:call-template>

  <!-- Iniciamos el manejo de los nodos dependientes -->
  <xsl:apply-templates select="./notariospublicos:DescInmuebles"/>
  <xsl:apply-templates select="./notariospublicos:DatosOperacion"/>
  <xsl:apply-templates select="./notariospublicos:DatosNotario"/>
  <xsl:apply-templates select="./notariospublicos:DatosEnajenante"/>
  <xsl:apply-templates select="./notariospublicos:DatosAdquiriente"/>

</xsl:template>

  <!-- Manejador de nodos tipo notariospublicos:DescInmuebles -->
  <xsl:template match="notariospublicos:DescInmuebles">

    <!-- Iniciamos el manejo de los nodos dependientes -->    
    <xsl:for-each select="./notariospublicos:DescInmueble">
      <xsl:apply-templates select="."/>
    </xsl:for-each>

  </xsl:template>

    <!-- Manejador de nodos tipo notariospublicos:DescInmueble -->
    <xsl:template match="notariospublicos:DescInmueble">

      <!-- Iniciamos el tratamiento de los atributos -->
      <xsl:call-template name="Requerido">
        <xsl:with-param name="valor" select="./@TipoInmueble"/>
      </xsl:call-template>

      <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>

  <!-- Manejador de nodos tipo notariospublicos:DatosOperacion -->
  <xsl:template match="notariospublicos:DatosOperacion">

    <!-- Iniciamos el tratamiento de los atributos -->
    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@NumInstrumentoNotarial"/>
    </xsl:call-template>

    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@FechaInstNotarial"/>
    </xsl:call-template>

    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@MontoOperacion"/>
    </xsl:call-template>

    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@Subtotal"/>
    </xsl:call-template>

    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@IVA"/>
    </xsl:call-template>

  </xsl:template>

  <!-- Manejador de nodos tipo notariospublicos:DatosNotario -->
  <xsl:template match="notariospublicos:DatosNotario">

    <!-- Iniciamos el tratamiento de los atributos -->
    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@CURP"/>
    </xsl:call-template>

    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@NumNotaria"/>
    </xsl:call-template>

    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@EntidadFederativa"/>
    </xsl:call-template>

    <xsl:call-template name="Opcional">
        <xsl:with-param name="valor" select="./@Adscripcion"/>
    </xsl:call-template>

  </xsl:template>

  <!-- Manejador de nodos tipo notariospublicos:DatosEnajenante -->
  <xsl:template match="notariospublicos:DatosEnajenante">

    <!-- Iniciamos el tratamiento de los atributos -->
    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@CoproSocConyugalE"/>
    </xsl:call-template>

    <!-- Iniciamos el manejo de los nodos dependientes -->
    <xsl:if test="./notariospublicos:DatosUnEnajenante">
      <xsl:apply-templates select="./notariospublicos:DatosUnEnajenante"/>
    </xsl:if>

    <xsl:if test="./notariospublicos:DatosEnajenantesCopSC">
      <xsl:apply-templates select="./notariospublicos:DatosEnajenantesCopSC"/>
    </xsl:if>

  </xsl:template>

    <!-- Manejador de nodos tipo notariospublicos:DatosUnEnajenante -->
    <xsl:template match="notariospublicos:DatosUnEnajenante">

      <!-- Iniciamos el tratamiento de los atributos -->
      <xsl:call-template name="Requerido">
        <xsl:with-param name="valor" select="./@Nombre"/>
      </xsl:call-template>

      <xsl:call-template name="Requerido">
        <xsl:with-param name="valor" select="./@ApellidoPaterno"/>
      </xsl:call-template>

      <xsl:call-template name="Opcional">
        <xsl:with-param name="valor" select="./@ApellidoMaterno"/>
      </xsl:call-template>

      <xsl:call-template name="Requerido">
        <xsl:with-param name="valor" select="./@RFC"/>
      </xsl:call-template>

      <xsl:call-template name="Requerido">
        <xsl:with-param name="valor" select="./@CURP"/>
      </xsl:call-template>

    </xsl:template>

    <!-- Manejador de nodos tipo notariospublicos:DatosEnajenantesCopSC -->
    <xsl:template match="notariospublicos:DatosEnajenantesCopSC">

      <!-- Iniciamos el manejo de los nodos dependientes -->
      <xsl:for-each select="./notariospublicos:DatosEnajenanteCopSC">
        <xsl:apply-templates select="."/>
      </xsl:for-each>

    </xsl:template>

      <!-- Manejador de nodos tipo notariospublicos:DatosEnajenanteCopSC -->
      <xsl:template match="notariospublicos:DatosEnajenanteCopSC">

        <!-- Iniciamos el tratamiento de los atributos -->
        <xsl:call-template name="Requerido">
          <xsl:with-param name="valor" select="./@Nombre"/>
        </xsl:call-template>

        <xsl:call-template name="Opcional">
          <xsl:with-param name="valor" select="./@ApellidoPaterno"/>
        </xsl:call-template>

        <xsl:call-template name="Opcional">
          <xsl:with-param name="valor" select="./@ApellidoMaterno"/>
        </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="./@CURP"/>
        </xsl:call-template>

        <xsl:call-template name="Requerido">
          <xsl:with-param name="valor" select="./@Porcentaje"/>
        </xsl:call-template>

      </xsl:template>

  <!-- Manejador de nodos tipo notariospublicos:DatosAdquiriente -->
  <xsl:template match="notariospublicos:DatosAdquiriente">

    <!-- Iniciamos el tratamiento de los atributos -->
    <xsl:call-template name="Requerido">
      <xsl:with-param name="valor" select="./@CoproSocConyugalE"/>
    </xsl:call-template>

    <!-- Iniciamos el manejo de los nodos dependientes -->
    <xsl:if test="./notariospublicos:DatosUnAdquiriente">
      <xsl:apply-templates select="./notariospublicos:DatosUnAdquiriente"/>
    </xsl:if>

    <xsl:if test="./notariospublicos:DatosAdquirientesCopSC">
      <xsl:apply-templates select="./notariospublicos:DatosAdquirientesCopSC"/>
    </xsl:if>

  </xsl:template>

    <!-- Manejador de nodos tipo notariospublicos:DatosUnAdquiriente -->
    <xsl:template match="notariospublicos:DatosUnAdquiriente">

      <!-- Iniciamos el tratamiento de los atributos -->
      <xsl:call-template name="Requerido">
        <xsl:with-param name="valor" select="./@Nombre"/>
      </xsl:call-template>

      <xsl:call-template name="Opcional">
        <xsl:with-param name="valor" select="./@ApellidoPaterno"/>
      </xsl:call-template>

      <xsl:call-template name="Opcional">
        <xsl:with-param name="valor" select="./@ApellidoMaterno"/>
      </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="./@CURP"/>
      </xsl:call-template>

    </xsl:template>

    <!-- Manejador de nodos tipo notariospublicos:DatosAdquirientesCopSC -->
    <xsl:template match="notariospublicos:DatosAdquirientesCopSC">

      <!-- Iniciamos el manejo de los nodos dependientes -->
      <xsl:for-each select="./notariospublicos:DatosAdquirienteCopSC">
        <xsl:apply-templates select="."/>
      </xsl:for-each>

    </xsl:template>

      <!-- Manejador de nodos tipo notariospublicos:DatosAdquirienteCopSC -->
      <xsl:template match="notariospublicos:DatosAdquirienteCopSC">

        <!-- Iniciamos el tratamiento de los atributos -->
        <xsl:call-template name="Requerido">
          <xsl:with-param name="valor" select="./@Nombre"/>
        </xsl:call-template>

        <xsl:call-template name="Opcional">
          <xsl:with-param name="valor" select="./@ApellidoPaterno"/>
        </xsl:call-template>

        <xsl:call-template name="Opcional">
          <xsl:with-param name="valor" select="./@ApellidoMaterno"/>
        </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="./@CURP"/>
        </xsl:call-template>

        <xsl:call-template name="Requerido">
          <xsl:with-param name="valor" select="./@Porcentaje"/>
        </xsl:call-template>

      </xsl:template>

</xsl:stylesheet>