Sie sind auf Seite 1von 3

Estesitioutilizacookiesparaanalizarlanavegacin.Sicontinanavegandoseentiendequeaceptasu Entendido.

uso.Vermsdetalles."

AprendeWeb
CreaydiseatussitiosenlaWeb.
ManualdeDOM
ElDOM(documentobjectmodel)marcalaescructuradelapgina

YahoratambienaprendeaprogramarenC++conAprendeWebC++

DOM(V)
AccesoaelementosXML
AccesoalapginadeXML
EnlapginaanteriorvimoscmopodamosaccederalDOMde
unapginaenXMLmedianteelmtodo XMLHttpRequest(),y
vimos tambin un pequeo ejemplo de cmo acceder a algunos
elementosdelapgina.
A partir de aqu se desarrollan una serie de tecnologas que
unenvarioslenguajesdeprogramacin,conocidascomoAjax.
Sinentraraexplicarcomofuncionaajax,(locuallodejamospara
el manual de ajax), veremos aqu los mtodos y propiedades ms
habitualesparaaccederaloselementosdeXMLmediantejavascript.

AccesoaelementosXML
Aunque cabra pensar que se pueden utilizar los mismos mtodos del DOM que en
HTML para acceder a los elementos de XML, esto no es as ya que mtodos como
getElementById() o getElementsByName() no pueden usarse con XML, ya
queparaelloXMLdeberateneralgunasetiquetaspredefinidas,cosaquenoocurre.
Por tanto el nico mtodo que podemos usar para localizar etiquetas XML es
getElementsByTagName().
Enrealidadtenemosvariosprocedimientosparaaccederaloselementos:

UsarelmtodogetElementsByTagName()
Tal como hemos visto en la pgina anterior, usamos el mtodo con cada etiqueta y
vamosllamandoacadaunodeloselementosdelarrayqueloforman.Estopresuponeque
tenemosquesaberelnombredecadaunadelasetiquetasylacantidaddeetiquetas que
hayconcadanombre.

Recorrerloselementos(nodos)deldocumento.
Volvamosalejemplodelapginaanteriordondetenamoselarchivolibro.XML:
<?xmlversion="1.0"encoding="iso885915"?>
<libro>
<titulo>DonJuanTenorio</titulo>
<autor>JosZorrilla</autor>
<genero>teatroclsico</genero>
<ao>1844</ao>
</libro>

Cargamos el documento (recordamos que lo hacamos mediante la funcin


cargaDomXML(),enarchivojavascriptaparte)elcualloobtenemosenlavariablexmlDoc.A
partirdeahmediantelapropiedad xmlDoc.childNodescreamosunarraycontodos

los nodos hijos del nodo documento. Como en cualquier array podemos recorrer los
los nodos hijos del nodo documento. Como en cualquier array podemos recorrer los
elementosmedianteunbucle.Lasrepeticionesdelbuclevienendeterminadasporlalongitud
del array, la cual se determina mediante la propiedad length. Veamos ahora cmo ver
estearchivoenunapginaHTMLmediantejavascript.Pginalibro.html
<!DOCTYPEHTMLPUBLIC"//W3C//DTDHTML4.0Transitional//EN">
<html>
<head>
<title>Pagetitle</title>
<scripttype="text/javascript"src="cargaDocXML.js"></script>
<scripttype="text/javascript">
//cargareldocumentoXML
xmlDoc=cargaDocXML("libro.xml")
//Obtenerarraycontodoslosnodossecundarios:
nodos=xmlDoc.getElementsByTagName("libro")[0].childNodes
varsalida=""//variablequerecogerlosdatos
//buclepararecorrerelarray
for(i=0i<nodos.lengthi++){
if(nodos[i].nodeType==1){//slonodostipo"element"(Type=1)
nombre=nodos[i].nodeName//Nombredelaetiqueta
valor=nodos[i].childNodes[0].nodeValue//textodelaetiqueta
salida+="<p>"+nombre+":"+valor+"</p>"//aadiravariabledesalida.
}
}
//sacardatosenlapgina
window.onload=function(){
texto=document.getElementById("milibro")
texto.innerHTML=salida
}
</script>
</head>
<body>
<h1>Libro</h1>
<divid="milibro"></div>
</body>
</html>

lapginaanteriorsevercomoenelsiguienteenlace:
Documentolibro

En este sencillo ejemplo accedemos a los elementos mediante la propiedad


childNodesquecreaelarrayquerecorremosconelbucle.
Unavezaccedemosacadaelemento,astoslesaplicamosvariaspropiedadesquenos
darn la informacin que necesitamos, estas son nodeType, nodeName,
nodeValue,lascualesexplicaremosmsadelante.
Eltextodedentrodecadaetiquetaesunnodoaparte(nododetexto)quedependedel
nodoetiqueta,esporesoquedebemosaccederaltexto(nododetexto)comoelprimernodo
hijodecadaetiqueta(nodoelement).
MediantelapropiedadnodeTypehemosrestringidoelaccesosloalosnodosdetipo
"element".Hacemosestoasparaquenosemuestrenotrostiposdenodosquesepueden
crear,yquenonosinteresaqueaparezcan.
steesunejemplosencilloenelquetodaslasetiquetasdependendelaetiquetaraz.
Encasodequehubieramsetiquetas anidadas hijas unas de otras, deberamos repetirel
proceso, creando un bucle dentro de otro o creando una funcin que compruebe si cada
etiquetatienemasetiquetasdependientes,ymostrandosuvalor.

propiedadesymtodosmscomunes

Propiedades
nodeName : Indica el nombre de la etiqueta o del atributo al que se le
aplica.
nodeValue:Indicaelvalordelelementoalqueseleaplica.Enunatributo
essuvaloryenunnododetextoeseltextoens.
nodeType : Indica el tipo de nodo a cada tipo de nodo se le asigna un
nmero, estos son los ms usados: 1. element, 2. attribute, 3. text, 4.
CDatasection, 5. Entity_Reference, 6. Entity, 7.Processing_Instruction 8.
Comment, 9. Document, 10. Document_Type, 11.Document_Fragment,
12.Notation.
childNodes : Devuelve un array con todos los nodos hijos que contiene el
nodo.
parentNode:Accesoalnodopadredeunnodo.
attributes:devuelveunarraycontodoslosatributosquecontieneelnodo,
eslaformanormaldeaccederalosatributosdeunnodoelement.
OtraspropiedadesquepodemosaplicaracualquiernododeXMLsonfirstChild,
lastChild, previousSibbling, nextSibbling, las cuales vienen
explicadasenlapginaIIIdeestemanual.

mtodos
Podemos usar los mismos mtodos que se usan en la manipulacin del DOM para
HTML, excepto, como se ha dicho antes, los mtodos getElementById() y
getElementsByName().LaformadeusarlosesigualquequeconHTML.Conellos
podemoscrear,remplazar,insertar,oduplicarcualquiernodo.Aunquevienenexplicadosen
la pgina III de este manual, y de una forma ms amplia en el curso de javascript,
recordemoscualessonstos:
getElementsByTagName() : Acceso a las etiquetas mediante su nombre,
creaunarraycontodaslasetiquetasconelmismonombre.
createElement():Creaunnododeltipo"element".
createTextNode():Creaunnododeltipo"text".
appendChild():insertaunnododentrodeotrocomohijo,acontinuacinde
losyaexistentes.
insertBefore():insertaunnododelantedeotro,tomandocomoreferencia
sunodopadre.
replaceChild():remplazaunnodoporotro.
removeChild():Eliminaunnodo.
hasChildNodes():Compruebasiunnodotienenodoshijos.
getAttribute():Devuelveelvalordeunatributo
setAttribute():cambiaelvalordeunatributo
removeAttribute():eliminaunatributo

EnlasiguientepginaseguiremosviendocmotrabajarconXMLyelDOM.
AspectosdeXMLyDOM

Das könnte Ihnen auch gefallen