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