Ver Mensaje Individual
  #9 (permalink)  
Antiguo 08/10/2007, 12:41
tammander
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 4 meses
Puntos: 7
Re: ASP y XML – Una aproximación: Cambiar el idioma a nuestro sitio web

Buscando información en el objeto

Una vez que todo ha ido bien, nos queda buscar la información que necesitamos dependiendo del momento y del lugar.

Cuando desarrollamos la estructura de nuestro archivo XML decidimos crear 3 tipos diferentes de nodos:

1 – Nodos Simples: Contendrían solo texto. Seria la traducción de partes de nuestra página que no contuvieran demasiada información. Por ejemplo: El nombre de la página

<NombrePagina>Mi sitio web en español</NombrePagina>

2 – Nodos con sección CDATA: Estos nodos son muy parecidos a los anteriores con la salvedad de que todo aquello que contenga no será analizado por el objeto.

<piePagina>
<![CDATA[
Aquí podemos meter etiquetas HTML, etc que no será analizado. La única condición es que el nodo debe contener es la sección CDATA (lo que haya entre lo que está en negrita).
]]>
</piePágina>

Mas info: http://www.w3schools.com/xml/xml_cdata.asp

3 – Nodos contenedores. Son aquellos nodos que van a contener más nodos. Un ejemplo es nuestro sistema de menus:
<menues>
<menu ref="index.asp" target="">Inicio</menu>
<menu ref="quienes.asp" target="">¿Quienes somos?</menu>
<menu ref="productos.asp" target="">Nuestros productos</menu>
<menu ref="contactar.asp" target="">Contactar</menu>
</menues>

Como veis es un nodo que contiene una serie de subnodos llamados todos menú.

-------

Empecemos por un ejemplo sencillo: Ponerle nombre a la página. Como vemos en los archivos XML, el nodo que contiene dicha información está muy cerca del documento raíz:

<Idioma> <----------------- documento raiz
< NombrePagina> <------ Nodo

Y, además, sólo existe un nodo que se llama NombrePagina. ¿Cómo accedemos a su infomación (a su text)? Usando uno de los métodos que contiene el objeto XMLDOM: getElementsByTagName.

Este método busca dentro del documento raiz aquellos elementos que se llamen de una determinada manera y nos devuelven una colección de todo aquellos elementos que encuentre. Esto pueden ser desde un simple nodo a toda una lista de nodos (NodeList)

Por ejemplo:

Set todoElDocumento = objXML.getElementsByTagName(‘*’)

Nos devolvería TODO el documento XML metido en una colección NodeList (una colección de nodos). Sin embargo, nosotros queremos algo muy concreto: Solo queremos el texto que hay en el interior de los tags o elementos.

Texto = idiomaXML.getElementsByTagName(etiqueta).Item(0).T ext

Es decir, nos devuelve el text (lo que hay entre <…> y </…>) del primer elemento de la colección (0).

Pongamos ahora una función:

Código:
  Public function GetIdioma(etiqueta)
              Dim Texto                  
              on error resume next
              Texto = objXML.getElementsByTagName(etiqueta).Item(0).Text
              ‘ Si se produce un error. Por ejemplo, que no encuentra la etiqueta, me devolverá
             ‘ el nombre de la etiqueta que he usado entre corchetes
  if err.number > 0 then
                          GetIdioma = "[" &  etiqueta  & "]"
              else
                          getidioma=texto
              end if
              on error goto 0
                          
  end function
Para usarlo:

[code]
<html>
<head>
<title><%=getIdioma(“NombrePagina”)%></title>
….

[code]


Hemos dado nuestro primer paso en crear nuestra página multi-idiomas con XML. El proximo post lo dedicaré a meter todas las operaciones que hagamos con el objeto XML dentro de una clase para organizarnos mejor y veremos lo interesante que es para poder reutilizar el código ;)

Más infotrmación sobre los objetos que contiene el componente de Microsoft: http://www.devguru.com/technologies/xml_dom/15602.asp
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -