Tendrias que poner cual es el nodo raiz. Algo asi:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<noticias> <-------------------------------------------- nodo raiz
<item>
<title>TITULO</title>
<link>ENLACE</link>
<pubdate>FECHA</pubdate>
<author>AUTOR</author>
<category>CATEGORIA</category>
</item>
</noticias> <------------------------------------------- final del nodo raiz
Aunque yo pondria la categoria como atributo del nodo item
<item category="13">
....
</item>
Para leer un archivo XML dispones de varios componentes. Generalmente el objeto que se usa para gestionar dichos archivos se llama XMLDOM o MSXML. Se llama con el CreateObject
set objXml = server.CreateObject("
Microsoft.XMLDOM")
o
set objXml = server.CreateObject("
MSXML2.DOMDocument")
donde
MSXML2 puede ser MSXML3, MSXML4 o la version disponible.
Una vez instanciado, el objeto dispone de una serie de metodos y propiedades muy interesantes.
Aqui puedes verlos.
Voy a ponerte un ejemplo simple. Imagina que dispones de un archivo XML con los paises del mundo. Algo asi:
paises.xml
Código:
<?xml version="1.0" encoding="UTF-8" ?>
<paises>
<pais id="af">Afghanistan</pais>
<pais id="ab">Albania</pais>
....
</paises>
Y queremos montar un combo box con los datos. Primero cargamos el archivo XML en el objeto
Código:
set objXml = server.CreateObject("MSXML2.DOMDocument")
objxml.async = false
' Aqui cargamos el archivo en el objeto
objxml.load(server.MapPath('paises.xml'))
' Gestion de errores
if objxml.parseError.errorCode <> 0 Then
response.Write("Error de Lectura (Por favor, ponerse en contacto con el webmaster).<br />FilePos: " & objxml.parseError.filepos & "<br /> Línea: " & objxml.parseError.Line & "<br /> Causa: " & objxml.parseError.reason & "<br /> Ocurrió en: " & objxml.parseError.srcText & "<br /> Archivo: " & objxml.parseError.URL)
response.End()
end if
Una vez pasada la criba de los errores, vayamos al proceso:
Código:
' Averiguamos cuantos paises tenemos
numPaises = objxml.selectSingleNode("/paises").childNodes.length
' Ahora montemos el combo box
response.write("<select id='paises' name='paises'>")
for n = 0 to numPaises-1
response.write("<option value='" & objxml.selectSingleNode("/paises").childNodes(n).attributes(0).Value & "'>")
response.write(objxml.selectSingleNode("/paises").childNodes(n).Text)
response.write("</option>" & vbCrLf)
next
' cerramos el select
response.write("</select>" & vbCrLf)
' liberamos el objeto
set objxml = nothing
Como veras, es mas controlar donde estan los nodos que necesitas buscar (es algo muy parecido a los niveles de los movieclips en ActionScript). Fijate como me muevo por los childnodes.
Suerte!!
Un saludo