Foros del Web » Programación para mayores de 30 ;) » Programación General »

problemas con namespaces

Estas en el tema de problemas con namespaces en el foro de Programación General en Foros del Web. Bueno, tengo un archivo XML utlizando un namespaces llamado "dist". Aqui esta el contenido, cogido un un ejemplo de osmosislatina <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="muestra.xsl"?> ...
  #1 (permalink)  
Antiguo 23/10/2003, 10:47
 
Fecha de Ingreso: enero-2002
Ubicación: Cádiz, España
Mensajes: 96
Antigüedad: 22 años, 4 meses
Puntos: 0
problemas con namespaces

Bueno, tengo un archivo XML utlizando un namespaces llamado "dist". Aqui esta el contenido, cogido un un ejemplo de osmosislatina

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="muestra.xsl"?>
<producto xmlns="http://osmosislatina.com/definiciones/producto.dtd"
xmlns:dist="http://osmosislatina.com/definiciones/distribuidores.dtd">
<nombre modelo="xdfsdf">
<disponibilidad lugar="almacen"> Si </disponibilidad>
<descripcion> 60 Watts Doble Canal </descripcion>
</nombre>
<dist:empresa>
<dist:serie>5845-2543-8614</dist:serie>
<dist:nombre>Sonido Real</dist:nombre>
</dist:empresa>
</producto>

Bueno, a este xml le he creado un XSLT para intentar utilizar sus datos, haciendo algunas pruebas. Es el siguiente:

<?xml version="1.0"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40"
xmlns:dist="http://osmosislatina.com/definiciones/distribuidores.dtd">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
<html><head/>
<body>
<xsl:call-template name="plantilla" />
<h1 align="center">Esto es una prueba</h1>
<xsl:apply-templates select="/producto" />
</body>
</html>
</xsl:template>

<xsl:template match="producto">
<h3 align="center">Disponibilidad: <xsl:value-of select="/producto/nombre/disponibilidad"/></h3>
<h3 align="center">Nombre Empresa: <xsl:value-of select="/producto/dist:empresa/dist:nombre"/></h3>
</xsl:template>

<xsl:template name="plantilla">
Prueba
</xsl:template>
</xsl:stylesheet>

Claramente he tenido que meter el xmlns:dist por que sino cascaba. Bueno, la cuestion es que no funciona. Cuando intento aplicar el template de producto, <xsl:apply-templates select="/producto" />, no me hace caso, y no me entre ni en la plantilla.

Le he quitado los namespaces y funciona correctamente, pero con los namespaces me falta algo y no se el que

¿alguien me puede ayudar?

gracias de antemano a todos
__________________
http://www.javielinux.com
  #2 (permalink)  
Antiguo 24/10/2003, 04:20
Avatar de josu  
Fecha de Ingreso: mayo-2002
Mensajes: 20
Antigüedad: 22 años
Puntos: 0
definición de la dtd

A ambos documentos les sobra la definición de la dtd

xmlns="http://osmosislatina.com/definiciones/producto.dtd"

Si eliminas la línea el mismo IE lo parsea bien!.

Es importante también que le pongas un encoding a ambos, y saber cómo los estas parseando, ¿qué parser utilizas?

Un saludo.

Jose.

[8]
  #3 (permalink)  
Antiguo 24/10/2003, 04:36
 
Fecha de Ingreso: enero-2002
Ubicación: Cádiz, España
Mensajes: 96
Antigüedad: 22 años, 4 meses
Puntos: 0
Si quito los xmlns de los dos me da un error, diciendo que no tiene definidos los namespaces, y es verdad, si los quito no están definidos, entonces no puedo poner ninguna etiqueta que empiece por "dist:".

Lo del enconding no lo tengo puesto por que es una prueba, pero lo tengo en cuenta. En relacion a lo del parser, no se exactamente a que te refieres. Las pruebas las estoy haciendo en un programa llama "XMLWriter" para Windows.

No se como hacer como crear un documento XSL con archivos que utilizan dferentes espacios de nombre.

gracias por tu respuesta, se te ocurre algo más??
__________________
http://www.javielinux.com
  #4 (permalink)  
Antiguo 29/10/2003, 04:49
Avatar de josu  
Fecha de Ingreso: mayo-2002
Mensajes: 20
Antigüedad: 22 años
Puntos: 0
a ver si damos en el clavo!

Ésta vez intentando razonar la respuesta...

Bueno, primero la solución, sin tocar las dtd's:

Baja la definición del espacio de nombres en el documento xml al nodo dist:empresa, el documento xml quedaría así:

---------------------------------------------------------------------

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="muestra.xsl"?>
<!--
<producto xmlns:dist="http://osmosislatina.com/definiciones/distribuidores.dtd">
-->
<producto>
<nombre modelo="xdfsdf">
<disponibilidad lugar="almacen"> Si </disponibilidad>
<descripcion> 60 Watts Doble Canal </descripcion>
</nombre>
<!--
<dist:empresa>
-->
<dist:empresa xmlns:dist="http://osmosislatina.com/definiciones/distribuidores.dtd">
<dist:serie>5845-2543-8614</dist:serie>
<dist:nombre>Sonido Real</dist:nombre>
</dist:empresa>
</producto>

---------------------------------------------------------------------

Y la explicación:

Cuando defines un espacio de nombres a nivel del nodo raíz, la xsl entiende que todos sus nodos hijos, incluido él (producto) comienzan por dicho espacio de nombres (dist:producto), por eso no te encuentra el nodo producto en la xsl.



Espero que ésto te valga.

En cuanto al parser, yo uso directamente el Internet Explorer 6.0.26 para abrir el documento xml, y me lo hace ok.

¿Es para algún proyecto o es una prueba?

Un saludo.

Jose.
[8]
  #5 (permalink)  
Antiguo 29/10/2003, 05:15
 
Fecha de Ingreso: enero-2002
Ubicación: Cádiz, España
Mensajes: 96
Antigüedad: 22 años, 4 meses
Puntos: 0
Gracias, pero me sigue haciendo unas cosas raras. Vamos a ver. Pongo el namespace tanto en producto como en la etiqueta empresa, y me funciona, el problema (y me acabo de dar cuenta) es cuando utilizo dos namespaces diferentes.

Fijate como en el primer XML tengo definido dos namespaces en la etiqueta producto:

<producto xmlns="http://osmosislatina.com/definiciones/producto.dtd"
xmlns:dist="http://osmosislatina.com/definiciones/distribuidores.dtd">

Uno llamemosle principal y otro "dist".

Si quito el "xmlns", o sea el principal, funciona, pero si no, no funciona. ¿como puedo trabajar con dos namespaces?

He probado en poner el namespace principal en la etiqueta producto y el dist en la etiqueta empresa, y tampoco funciona.

¿alguna idea?

Son una seria de pruebas que estoy haciendo para realizar un proyecto para mi empresa

saludos y gracias
__________________
http://www.javielinux.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:18.