XSL - Problema con un DTD y XSL

 
Vista:

Problema con un DTD y XSL

Publicado por p@vr1 (1 intervención) el 01/11/2007 15:29:38
Hola, tengo un xml que referencia un DTD, al cual le hice un cambio para q el xml reconociera dentro de su tag "chapters" otro tag "vista.filename"...

EN EL DTD:

<!ELEMENT chapter (..., vista.filename?,...)>

<!ELEMENT vista.filename (#PCDATA)>

Hasta este momento todo esta bien, el dtd deja al xml tener este tag extra...

EL PROBLEMA es cuando trato de accesar a ese "vista.filename" desde el xsl, puedo accesar a otros tags del "chapter" que estaban desde el inicio, pero cuando busco al "vista.filename" NO LO ENCUENTRA...!!!!

EN EL XSL:

<xsl:template match="chapter">
<xsl:value-of select="vista.filename"> ..........> esto retorna vacio!
</xsl:template>

supongo que tiene que ser algo de configuracion o algo que estoy pasando por alto en el DTD ya que los otros tags si son reconocidos excepto el que acabo de agregar ("vista.filename"), ademas soy algo nuevo en esto... alguien que me pueda ayudar por favor me urge!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Acceso a un elemento agregado en el DTD desde XSLT

Publicado por Alejandro (227 intervenciones) el 06/07/2023 17:27:49
El problema que estás experimentando podría estar relacionado con la falta de definición de los espacios de nombres (namespaces) en tu XSLT. Cuando se agrega un nuevo elemento al DTD, es importante asegurarse de que el espacio de nombres correspondiente también se declare y se utilice en el XSLT.

Aquí tienes una posible solución:

1. Asegúrate de que el DTD esté correctamente enlazado al XML y declare el espacio de nombres adecuado. Por ejemplo:
1
2
3
4
<!DOCTYPE chapter SYSTEM "tu_dtd.dtd">
<chapter xmlns="http://ejemplo.com/tu_namespace">
...
</chapter>

2. En el XSLT, asegúrate de que estés utilizando el mismo espacio de nombres al hacer referencia al elemento `vista.filename`. Puedes utilizar la función `namespace-uri()` para obtener el URI del espacio de nombres correspondiente y utilizarlo en tu consulta. Por ejemplo:
1
2
3
<xsl:template match="tu_namespace:chapter" xmlns:tu_namespace="http://ejemplo.com/tu_namespace">
<xsl:value-of select="tu_namespace:vista.filename"/>
</xsl:template>

Asegúrate de reemplazar `"http://ejemplo.com/tu_namespace"` con el URI del espacio de nombres correspondiente que estás utilizando en tu DTD y XML.

Al utilizar el espacio de nombres correcto en el XSLT, deberías poder acceder y obtener el valor del elemento `vista.filename` en tus plantillas.

Recuerda que los espacios de nombres son sensibles a las mayúsculas y minúsculas, por lo que debes asegurarte de que coincidan exactamente con los declarados en el XML y el DTD.

Espero que esto te ayude a resolver el problema de acceso al elemento `vista.filename` desde tu XSLT.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar