Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #3341  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por Joze Ver Mensaje
Buenos días:

Se ha publicado la Orden Ministerial


www . boe . es/diario_boe/txt.php?id=BOE-A-2024-22138 <--- (quitar espacios)

a partir del 29 de julio de 2025 no se podrá desarrollar ni comercializar ningún sistema informático que no esté adaptado

Abrazos a todos
Gracias
A ver si alguien hace un resumen antes de que lo leamos.
  #3342  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por sglorka Ver Mensaje
Si tienes dudas sobre este aspecto te resumo la consulta vinculante emitida en octubre de 2022 y que bmfranky publicó hace unos diás

Resolución de Dirección General de Tributos Vinculante V2245-22 del 26 de Octubre de 2022
"entre las causas que motivan la expedición obligatoria de una factura rectificativa se comprende la consignación de un nuevo destinatario de la factura cuando se incurrió en un error, criterio sustentado por este Centro Directivo entre otras en la contestación vinculante número V1792-06, de fecha 7 de septiembre de 2006. Debe señalarse que es causa de rectificación de las facturas la consignación errónea de cualquier dato o requisito obligatorio que se consigne en las mismas, como pudiera ser el caso de los datos de identificación del destinatario como sucede en la factura a la que se refiere el escrito de consulta. Por tanto, en caso de que se haya consignado de manera incorrecta la identificación del destinatario de la factura, el consultante deberá expedir una factura rectificativa que deberá constar en serie específica de factura."
Enviada consulta de nuevo agregando consulta vinculante, está vez a través de nuestra asesoría.
  #3343  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
cambio esquema

Señores,
ya han actualizado el esquema de envio con los nuevos cambios en cabecera y registroalta/registroanulacion etc
Si intentais enviar con el anterior da error.
  #3344  
Antiguo 28-10-2024
keno_71 keno_71 is offline
Miembro
 
Registrado: feb 2008
Posts: 69
Poder: 18
keno_71 Va por buen camino
Inicio verifactu

Veremos si el inicio de verifactu se retrasa hasta el 29-07-2025 o se indica un plazo posterior
  #3345  
Antiguo 28-10-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
No sé por qué motivo no me importa el .wsdl. ¿Hay algo especial que hacer? porque lo que hago es (Delphi Berlin): Component-Import WSDL, poner la url del wsdl y darle "palante" hasta el final, también he probado poniendo que use el SOAP 1.2 y nada, me da este error:





Gracias y un saludo.
__________________
Be water my friend.
  #3346  
Antiguo 28-10-2024
JoseLeeTo JoseLeeTo is offline
Miembro
 
Registrado: jun 2021
Posts: 76
Poder: 4
JoseLeeTo Va por buen camino
El certificado no es correcto, o no se ha seleccionado correctamente

Cita:
Empezado por ermendalenda Ver Mensaje
El certificado debe ser del mismo cir que el emisor de la factura, en caso contrario debes rellenar los nodos de envio por terceros.
Muchas gracias.


Entiendo que con lo de "cir", te refieres al nif. ¿No?

El certificado es el mío personal - de la FNMT - y las pruebas las estoy realizando con un emisor de facturas con mi nombre y NIF.
Pero el error, es el que comento con código 403 - El certificado no es correcto, o no se ha seleccionado correctamente.

Creo que el error, no es en la validación del XML como tal, porque ni llega a validarlo. No devuelve un XML de respuesta de error... sino un HTML, como código de error de ese tipo.
Les consulté, y me contestaron que en ese tipo de errores, devolvían un HTML (la misma página de error que si conectas a sus servicios, y no te validas).
Al existir un error previo a la validación del XML (de certificado según ellos), creo que ni siquera valida

Y es que no se me ocurre nada más, ya que entiendo que solamente hay que instalar dicho certificado en el almacén Personal.
Al menos en TicketBai, funciona correctamente así desde siempre.


Muchas gracias
  #3347  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por JoseLeeTo Ver Mensaje
Muchas gracias.


Entiendo que con lo de "cir", te refieres al nif. ¿No?

El certificado es el mío personal - de la FNMT - y las pruebas las estoy realizando con un emisor de facturas con mi nombre y NIF.
Pero el error, es el que comento con código 403 - El certificado no es correcto, o no se ha seleccionado correctamente.

Creo que el error, no es en la validación del XML como tal, porque ni llega a validarlo. No devuelve un XML de respuesta de error... sino un HTML, como código de error de ese tipo.
Les consulté, y me contestaron que en ese tipo de errores, devolvían un HTML (la misma página de error que si conectas a sus servicios, y no te validas).
Al existir un error previo a la validación del XML (de certificado según ellos), creo que ni siquera valida

Y es que no se me ocurre nada más, ya que entiendo que solamente hay que instalar dicho certificado en el almacén Personal.
Al menos en TicketBai, funciona correctamente así desde siempre.


Muchas gracias
Sí así es.
Entonces no se me ocurre otra cosa que no sea que hay algún error en la llamada desee donde lees el certificad, que el firewall esté cortando algo o tengas desactivado algo de llamadas tsl..
  #3348  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
No sé por qué motivo no me importa el .wsdl. ¿Hay algo especial que hacer? porque lo que hago es (Delphi Berlin): Component-Import WSDL, poner la url del wsdl y darle "palante" hasta el final, también he probado poniendo que use el SOAP 1.2 y nada, me da este error:





Gracias y un saludo.
Prueba cambiando la WEB de los xsd a producción normal. Creo que nl están en preproduccion
  #3349  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
otra curiosidad

Sobre lo que acaban de publicar en el boe:
sobre el hash anterior lo que tiene que ir en la HuellaAnterior:
Cita:
4º Los primeros 64 caracteres de la huella o «hash» del registro de facturación inmediatamente anterior.
Entonces pienso yo que tienen previsto en algun momento pasar al hash512 o cualquiera sabe, por que el hexadecimal del hash256 SIEMPRE tiene 64 caracteres.
  #3350  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
A ver si alguien puede consultar esto

Hola, los que trabajamos en programas de escritorio tenemos aqui un problema:
Cita:
f)En cualquier caso, el obligado tributario usuario del sistema informático deberá asegurarse de que la fecha y hora empleadas por dicho sistema informático para fechar los registros de facturación son exactas, con un margen máximo de error admitido de un minuto
Ya que si permitimos en algún momento trabajar sin internet no podemos controlar que por alguna incidencia se cambie el reloj. Incluso que algun listo se las "sepa todas" y quiera cambiar una factura de fecha. Y tampoco podemos cortar de que no se pueda facturar sin conexion

Por favor que alguien haga la consulta, yo los tengo bombardeados.

Me respondo:
Si no hay conexion ya hay que marcar incidencia pase lo que pase.
  #3351  
Antiguo 28-10-2024
Zento Zento is offline
Miembro
 
Registrado: may 2017
Posts: 22
Poder: 0
Zento Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Hola, los que trabajamos en programas de escritorio tenemos aqui un problema:


Ya que si permitimos en algún momento trabajar sin internet no podemos controlar que por alguna incidencia se cambie el reloj. Incluso que algun listo se las "sepa todas" y quiera cambiar una factura de fecha. Y tampoco podemos cortar de que no se pueda facturar sin conexion

Por favor que alguien haga la consulta, yo los tengo bombardeados.

Me respondo:
Si no hay conexion ya hay que marcar incidencia pase lo que pase.
El obligado tributario del sistema informático es el usuario final. Así que tú como desarrollador puedes estar tranquilo. Si cambia la fecha o la hora tampoco debería funcionar SSL. En cualquier Windows actual eso está más que cubierto.
  #3352  
Antiguo 28-10-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Cita:
Empezado por ermendalenda Ver Mensaje
Prueba cambiando la WEB de los xsd a producción normal. Creo que nl están en preproduccion

Gracias pero me dice que no existe la url:



https://www2.agenciatributaria.gob.e...cturacion.wsdl


sin embargo la de preproducción si que existe:


https://prewww2.aeat.es/static_files...cturacion.wsdl


¿Alguien se ha descargado ya el fichero?


Saludos.
__________________
Be water my friend.
  #3353  
Antiguo 28-10-2024
Franche Franche is offline
Miembro
 
Registrado: abr 2024
Posts: 52
Poder: 2
Franche Va por buen camino
No pone nada de plazos ? no lo veo
  #3354  
Antiguo 28-10-2024
pablog2k pablog2k is offline
Miembro
 
Registrado: may 2017
Posts: 179
Poder: 8
pablog2k Va por buen camino
Cita:
Empezado por Franche Ver Mensaje
No pone nada de plazos ? no lo veo
probablemente lo dirán en la reunión de ahora
  #3355  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por Zento Ver Mensaje
El obligado tributario del sistema informático es el usuario final. Así que tú como desarrollador puedes estar tranquilo. Si cambia la fecha o la hora tampoco debería funcionar SSL. En cualquier Windows actual eso está más que cubierto.
Bueno, realmente si funciona el SSL, ya lo he probado enviando como si tuviera tabto el registro como el equipo en 2021:
Cita:
AltaIncorrecto1152La fecha de Expedicion de la factura no puede ser inferior al indicado en la Orden Ministerial.
A ver que puedeo hacer con este mensaje, por que como se emitan facturas mal de fecha/año tengo un problema.
Se me ocurre que si no puedo verificar la fecha que no emita la factura aunque deje facturar hasta que se solucione y pongo el mensaje ese que dicen que hay problemas.

Última edición por ermendalenda fecha: 28-10-2024 a las 12:17:45.
  #3356  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
Gracias pero me dice que no existe la url:



https://www2.agenciatributaria.gob.e...cturacion.wsdl


sin embargo la de preproducción si que existe:


https://prewww2.aeat.es/static_files...cturacion.wsdl


¿Alguien se ha descargado ya el fichero?


Saludos.
No es el wsdl.
Me refiero en las cabeceras del xml en referencia a los XSD has puesto el prewww2. y es www2.agenciatributaria.gob.es/
  #3357  
Antiguo 28-10-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Cita:
Empezado por JoseLeeTo Ver Mensaje
Buenos dias a todos.

Gracias en primer lugar por vuestra a ayuda. Pude desarrollar el envio TicketBai en su momento, gracias a este foro.

Tengo una duda al enviar. Trabajo con C# (Visual Studio 2015).
Cada vez que trato de enviar, obtengo siempre una respuesta en HTML, advirtiéndome que "el certificado no es correcto, o no se ha seleccionado correctamente" - Error 403.
He instalado el certificado en todos los navegadores que tengo, en el almacén de "Personal", pero a la hora de enviar, selecciono dicho certificado (es el mío personal de la FNMT - y es funcional dado que entro en las sedes perfectamente, he realizado la declaración con el mismo, etc...) .... pero la respuesta a través del código es un HTML (no un XML) con ese error 403.

¿Alguien ha logrado enviar sin problemas, teniendo el certificado instalado en el navegador? ¿Qué puede estar ocurriendo para que no esté validando mi certificado?

Mil gracias de antemano.
Un saludo
Hola te respondo por aqui y asi le puede servir a alguien mas.


En el App.config teneis que poner que usais la identificacion con certificado, asi:
Cita:
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
Os pongo como queda en el app config.

Código:
    <client>
      <endpoint address="https://www1.agenciatributaria.gob.es/wlpl/BURT-JDIT/ws/VNifV2SOAP"
        binding="basicHttpBinding" bindingConfiguration="VNifV2SoapBinding"
        contract="ChecaNifsActivos.VNifV2" name="VNifPort1" />
      <endpoint address="https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"
        binding="basicHttpBinding" bindingConfiguration="sfVerifactu"
        contract="ServicioVerifactu.sfPortTypeVerifactu" name="SistemaVerifactuPruebas" />
      <endpoint address="https://prewww10.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"
        binding="basicHttpBinding" bindingConfiguration="sfVerifactu1"
        contract="ServicioVerifactu.sfPortTypeVerifactu" name="SistemaVerifactuSelloPruebas" />
    </client>
    <bindings>
      <basicHttpBinding>
        <binding name="VNifV2SoapBinding">
         <security mode="Transport">
            <transport clientCredentialType="Certificate" />     

          </security>
        </binding>
        <binding name="VNifV2SoapBinding1" />
        <binding name="sfVerifactu">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
        <binding name="sfVerifactu1">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
        <binding name="sfVerifactu2" />
        <binding name="sfRequerimiento" />
      </basicHttpBinding>
    <customBinding>
        <binding name="sfVerifactu">
          <textMessageEncoding messageVersion="Soap11" writeEncoding="utf-8" />
          <httpsTransport />
        </binding>
      </customBinding>
    </bindings>
Tambien os pongo la funcion para seleccionar los certificados del sistema y luego almacenarlos en bytes[] para guardarlos en la base de datos.


Código:
        public static X509Certificate2 ElegirCertificado()
        {
            try
            {
                X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Selección de Certificados", "Seleccione un certificado de la lista para firmar la factura electrónica", X509SelectionFlag.SingleSelection);

                X509Certificate2Enumerator Certificado = scollection.GetEnumerator();
                X509Certificate2 cert = new X509Certificate2();
                if (scollection.Count > 0)
                {
                    X509Certificate2Enumerator en = scollection.GetEnumerator();
                    en.MoveNext();
                    cert = en.Current;
                    if (DateTime.Now > cert.NotAfter)
                    {
                        throw new Exception("Certificado caducado");
                    }
                    else
                    {
                        return cert;
                    }
                }

                if (fcollection.Count == 0)
                {
                    MessageBox.Show("No hay certificados electrónicos instalados en tu equipo");
                }
                else
                {
                    if (scollection.Count == 0)
                    {
                        MessageBox.Show("No has seleccionado ningún certificado");
                    }
                }
                store.Close();
                var temp = scollection.OfType<X509Certificate2>();
                var cert1 = scollection.OfType<X509Certificate2>().Where(x => x.Subject == "CN=FNMT-RCM").First(); // + Program.configTaller.NombreTaller).First();
                return cert;
            }
            catch (Exception ex)
            {
                //  throw ex;
            }
            //X509Store store = new X509Store(StoreLocation.CurrentUser);
            //store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            //X509Certificate2Collection certificates = store.Certificates;
            //X509Certificate2Collection foundCertificates = certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            //var cert = foundCertificates.OfType<X509Certificate>().Where(x => x.Subject == "CN="+Program.configTaller.NombreTaller).First();
            return null;
        }
Esto devuelve el certificado seleccionado.
Luego simplemente lo exportamos a bytes con una contraseña por nuestra seguridad.
Código:
 var certificado = ConfigDB.ElegirCertificado();// CertificadoSeleccionado();
            if(null != certificado)
            {
                string caducidad = certificado.GetExpirationDateString();
                Program.certificado = certificado.Export(X509ContentType.Cert, Program.passcertificado);<-- Este es el password que usaremos para guardar/usar el certificado.
                txtCaducidad.Text = caducidad;
                ConfigDB.ActualizarCertificado(1, Program.certificado, caducidad);
            }
  #3358  
Antiguo 28-10-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.905
Poder: 22
newtron Va camino a la fama
Cita:
Empezado por ermendalenda Ver Mensaje
No es el wsdl.
Me refiero en las cabeceras del xml en referencia a los XSD has puesto el prewww2. y es www2.agenciatributaria.gob.es/

Pues perdóname pero no acabo de enterarme. Entiendo que para generar el nuevo "Sistemafacturacion.pas" tengo que importar el nuevo .wsdl que está en: https://prewww2.aeat.es/static_files...cturacion.wsdl y he probado como me dices con: https://www2.aeat.es/static_files/co...cturacion.wsdl y me dice que no existe.
__________________
Be water my friend.
  #3359  
Antiguo 28-10-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 1.768
Poder: 5
ermendalenda Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
No sé por qué motivo no me importa el .wsdl. ¿Hay algo especial que hacer? porque lo que hago es (Delphi Berlin): Component-Import WSDL, poner la url del wsdl y darle "palante" hasta el final, también he probado poniendo que use el SOAP 1.2 y nada, me da este error:





Gracias y un saludo.
Perdona pensaba que te estaba dadono error al enviar el xml no al importar el wdsl, te he leido mal, por eso el lio ya que las namespaces empiezan igual:
Código PHP:
 <soapenv:Envelope  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicurate waciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">     <soapenv:Header />   - <soapenv:Body
</div></div></div>


Sé que ha habido cambios en el wsdl hace 3 dias, asegurate que sea la última version.
  #3360  
Antiguo 28-10-2024
antoine0 antoine0 is offline
Miembro
 
Registrado: oct 2021
Posts: 257
Poder: 4
antoine0 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Si alguno puede traducir donde se produce el cambio, a nivel del xml, se lo agradeceria, ya que yo genero los xlm a pelo y me cuesta muchisimo leer el xsd
Hago dos cosas a cada cambio de XSD:
  1. Comparo con la versión anterior; lo hago con la herramienta diff (de Unix) pero es solo por costumbre, cualquiera herramienta valga. Por ejemplo, ponerlos en un sistema de control de versión lo hace de manera automática.
  2. Paso el XSD por una transformación en formato HTML, que me resulta muchísimo más sencillo de leer

Hay que pasar todos los esquemas involucrados en un determinado WSDL, y dejar los HTML en el mismo repertorio.

La transformación que uso está derivada de una que encontró hace años (y tiene aún más años) y que creo es de uso libre.

Código:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Stylesheet for NHSiS Schemas - David Brazier 17/11/00
     Work in progress, free for use as-is.
     (C) Common Services Agency 2000
 Modifications (C) 2017-2024 Antoine Leca (free to use) -->
<xsl:stylesheet version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:output encoding="UTF-8"/>
<xsl:strip-space elements="*"/>

	<xsl:template match="xsd:schema">
		<html>
			<head>
				<title>Schema: <xsl:value-of select="@targetNamespace"/>
				</title>
			</head>
			<style>
   table { border-collapse: collapse }
   td { vertical-align: top }
   </style>
			<!-- for testing:
   td { border: 1px solid blue; vertical-align: top }
-->
			<body>
				<h3>Schema: <xsl:value-of select="@targetNamespace"/></h3>
				<p>Version: <xsl:value-of select="@version"/>
				</p>
				<xsl:apply-templates/>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="xsd:import">
		<hr/>
		<i>Import Schema <xsl:value-of select="@namespace"/> from 
		<a>
			<xsl:attribute name="href">
				<xsl:value-of select="@schemaLocation"/>.html
			</xsl:attribute>
			{<xsl:value-of select="@schemaLocation"/>}
		</a>
		</i>
	</xsl:template>

	<xsl:template match="xsd:element">
		<xsl:if test="..=/">
			<hr/>
		</xsl:if>
		<table>
			<tr>
				<td colspan="2">
					<b>
						<xsl:value-of select="@name"/>
					</b>
					 
					<xsl:if test="@type">
					: <a>
<!--
	<xsl:variable name="prefix" select="substring-before(name(), concat(':', local-name()) )"/>
 -->
						<xsl:variable name="prefix" select="substring-before(@type,':')"/>

						<xsl:variable name="ns" select="namespace::*[name()=$prefix]"/>
<!--
bug if name(.) contains a namespace... (= if #default namespace is NOT xsd)
Could check that namespace::*[name()=''] == "http://www.w3.org/2001/XMLSchema"
BUGBUG following does not work (double declaration?)
						<xsl:choose>
							<xsl:when test="contains(name(), ':')">
								<xsl:variable name="ns0" select="namespace::*[substring-after(name(.),':')=$prefix]"/>
							</xsl:when>
							<xsl:otherwise>
								<xsl:variable name="ns" select="namespace::*[name()=$prefix]"/>
							</xsl:otherwise>
						</xsl:choose>
 -->
						<xsl:choose>
							<xsl:when test="@type = 'string' or @type = 'double' ">
								<b><xsl:value-of select="@type"/></b>
							</xsl:when>
							<xsl:when test="not($prefix)">
								<xsl:attribute name="href">#<xsl:value-of select="@type"/></xsl:attribute>
								<b>!<xsl:value-of select="@type"/>!</b>
							</xsl:when>
							<xsl:when test="$ns=/xsd:schema/@targetNamespace">
								<xsl:attribute name="href">#<xsl:value-of select="substring-after(@type,':')"/></xsl:attribute>
							</xsl:when>
							<xsl:when test="/xsd:schema/xsd:import[@namespace=$ns]">
								<xsl:attribute name="href"><xsl:value-of select="/xsd:schema/xsd:import[@namespace=$ns]/@schemaLocation"/>.html#<xsl:value-of select="substring-after(@type,':')"/></xsl:attribute>
								{<xsl:value-of select="/xsd:schema/xsd:import[@namespace=$ns]/@schemaLocation"/>}
							</xsl:when>
						</xsl:choose>
						<xsl:value-of select="substring-after(@type,':')"/>
					</a>
					</xsl:if>
					(<xsl:choose>
						<xsl:when test="@minOccurs"><xsl:value-of select="@minOccurs"/></xsl:when>
						<xsl:otherwise>1</xsl:otherwise>
					</xsl:choose>-<xsl:choose>
						<xsl:when test="@maxOccurs"><xsl:value-of select="@maxOccurs"/></xsl:when>
						<xsl:otherwise>1</xsl:otherwise>
					</xsl:choose>)
				</td>
			</tr>
			<tr>
				<td width="25"/>
				<td>
					<xsl:apply-templates select="*"/>
				</td>
			</tr>
		</table>
	</xsl:template>

	<xsl:template match="xsd:simpleType">
		<xsl:if test="..=/">
			<hr/>
		</xsl:if>
		<table>
			<xsl:attribute name="id">
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			<tr>
				<td colspan="2">
					<i>type </i><b>
						<xsl:value-of select="@name"/>
					</b>:
					 <xsl:value-of select="@type"/>
				</td>
			</tr>
			<tr>
				<td width="25"/>
				<td>
					<xsl:apply-templates select="*"/>
				</td>
			</tr>
		</table>
	</xsl:template>
	<xsl:template match="xsd:complexType">
		<xsl:if test="..=/">
			<hr/>
		</xsl:if>
		<table>
			<xsl:if test="@name">
			<xsl:attribute name="id">
				<xsl:value-of select="@name"/>
			</xsl:attribute>
			<tr>
				<td colspan="2">
					<i>type </i><b>
						<xsl:value-of select="@name"/>
					</b>:
					 <xsl:value-of select="@type"/>
				</td>
			</tr>
			</xsl:if><!-- test="@name" -->
			<tr>
				<td width="25"/>
				<td>
					<xsl:apply-templates select="*"/>
				</td>
			</tr>
		</table>
	</xsl:template>
	<xsl:template match="xsd:sequence">
		<xsl:if test="..=/">
			<hr/>
		</xsl:if>
		<table>
			<tr>
				<td width="25" style="border-right: 1px solid black"/>
				<td>
					<xsl:apply-templates select="*"/>
				</td>
			</tr>
		</table>
	</xsl:template>
	<xsl:template match="xsd:choice">
		<xsl:if test="..=/">
			<hr/>
		</xsl:if>
		<table>
			<tr>
				<td width="25" style="vertical-align: middle; border-right: double black">
				choice
				</td>
				<td>
					<xsl:apply-templates select="*"/>
				</td>
			</tr>
		</table>
	</xsl:template>
	<xsl:template match="xsd:extension">
		<i>extends </i> 
		<xsl:variable name="prefix" select="substring-before(@base,':')"/>
		<xsl:variable name="ns" select="namespace::*[name()=$prefix]"/>
		<a>
		<xsl:choose>
			<xsl:when test="@base = 'string' or @base = 'double' ">
			<!-- bug: missing @href; can we simply drop it? -->
				<b><xsl:value-of select="@base"/></b>
			</xsl:when>
			<xsl:when test="not($prefix)">
				<xsl:attribute name="href">#<xsl:value-of select="@base"/></xsl:attribute>
				<xsl:value-of select="@base"/>
			</xsl:when>
			<xsl:when test="$ns=/xsd:schema/@targetNamespace">
				<xsl:attribute name="href">#<xsl:value-of select="substring-after(@base,':')"/></xsl:attribute>
				<xsl:value-of select="substring-after(@base,':')"/>
			</xsl:when>
			<xsl:when test="/xsd:schema/xsd:import[@namespace=$ns]">
				<xsl:attribute name="href"><xsl:value-of select="/xsd:schema/xsd:import[@namespace=$ns]/@schemaLocation"/>.html#<xsl:value-of select="substring-after(@base,':')"/></xsl:attribute>
				{<xsl:value-of select="/xsd:schema/xsd:import[@namespace=$ns]/@schemaLocation"/>}
				<xsl:value-of select="substring-after(@base,':')"/>
			</xsl:when>
		</xsl:choose>
		</a>
		<xsl:apply-templates select="*"/>
	</xsl:template>

	<xsl:template match="xsd:restriction">
		<xsl:choose>
			<xsl:when test="contains(@base, ':')">
				<xsl:variable name="prefix" select="substring-before(@base,':')"/>
				<xsl:variable name="ns" select="namespace::*[name()=$prefix]"/>
		<i>is new </i> 
		<a>
				<xsl:choose>
					<xsl:when test="@base = 'string' or @base = 'double' ">
						<b><xsl:value-of select="@base"/></b>
					</xsl:when>
					<xsl:when test="not($prefix)">
						<xsl:attribute name="href">#<xsl:value-of select="@base"/></xsl:attribute>
						<xsl:value-of select="@base"/>
					</xsl:when>
					<xsl:when test="$ns=/xsd:schema/@targetNamespace">
						<xsl:attribute name="href">#<xsl:value-of select="substring-after(@base,':')"/></xsl:attribute>
						<xsl:value-of select="substring-after(@base,':')"/>
					</xsl:when>
					<xsl:when test="/xsd:schema/xsd:import[@namespace=$ns]">
						<xsl:attribute name="href"><xsl:value-of select="/xsd:schema/xsd:import[@namespace=$ns]/@schemaLocation"/>.html#<xsl:value-of select="substring-after(@base,':')"/></xsl:attribute>
						{<xsl:value-of select="/xsd:schema/xsd:import[@namespace=$ns]/@schemaLocation"/>}
						<xsl:value-of select="substring-after(@base,':')"/>
					</xsl:when>
				</xsl:choose>
		</a>  
			</xsl:when>
			<xsl:when test="./xsd:enumeration">
			<!-- nothing -->
			</xsl:when>
			<xsl:otherwise>
				<i>&lt;<xsl:value-of select="@base"/>&gt;</i>  
			</xsl:otherwise>
		</xsl:choose>
		<xsl:apply-templates select="*"/>
	</xsl:template>
	<xsl:template match="xsd:length">
		[<xsl:value-of select="@value"/>]
	</xsl:template>
	<xsl:template match="xsd:minLength">
		[<xsl:value-of select="@value"/> ..
	</xsl:template>
	<xsl:template match="xsd:maxLength">
		<!-- add [0.. if there are no minLength -->
		<xsl:if test="not(../xsd:minLength)">[0..</xsl:if>
		<xsl:value-of select="@value"/>]
	</xsl:template>
	<xsl:template match="xsd:enumeration">
		"<xsl:value-of select="@value"/>"
		<xsl:apply-templates select="*"/>
	</xsl:template>
	<xsl:template match="xsd:pattern">
		<i> like </i>/<xsl:value-of select="@value"/>/
		<xsl:apply-templates select="*"/>
	</xsl:template>
	<xsl:template match="xsd:annotation">
		<xsl:for-each select="xsd:documentation">
			<small>
				<xsl:value-of select="."/>
			</small>
			<br/>
		</xsl:for-each>
		<xsl:for-each select="xsd:appinfo">
			<small>
				<i>
					<xsl:value-of select="."/>
				</i>
			</small>
			<br/>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
Si los moderadores lo consideran oportuno, se puede recortar el código, ponerlo análisis de sintaxis XML, o mover este post a otro hilo más adecuado.
Archivos Adjuntos
Tipo de Archivo: zip xsd2html.zip (1,8 KB, 16 visitas)
Tema Cerrado



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 00:11:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi