vbscript - lenguaje - como crear un archivo.vbs con bloc de notas
VBScript y loadXML: no válido en el nivel superior del documento. ¿Como arreglarlo? (2)
Tres observaciones adicionales:
(1) Como .parseError.reason tiende a ser críptico, vale la pena incluir su propiedad .srcTxt (y el parámetro a .loadXml):
Dim xmlurl : xmlurl = "song.xml"
Dim xmlDoc : Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.loadXML xmlurl
If 0 <> xmlDoc.parseError.errorcode Then
WScript.Echo xmlDoc.parseError.reason, "Src:", xmlDoc.parseError.srcText
Else
WScript.Echo "surprise, surprise"
End if
salida:
Invalid at the top level of the document.
Src: song.xml
Por supuesto, escribir una Función / Sub que tome en cuenta todas las propiedades de .parseError y usar eso siempre, sería aún mejor.
(2) Para cargar un archivo o URL, use .load:
Dim xmlDoc : Set xmlDoc = CreateObject("Microsoft.XMLDOM")
Dim xmlurl
For Each xmlurl In Array("song.xml", "http://gent/~eh/song.xml", "zilch")
xmlDoc.async = False
if xmlDoc.load(xmlurl) Then
With xmlDoc.documentElement.firstChild
WScript.Echo xmlurl _
, .tagName _
, .firstChild.tagName _
, .firstChild.text
End With
Else
WScript.Echo xmlurl, xmlDoc.parseError.reason, "Src:", xmlDoc.parseError.srcText
End if
Next
salida:
song.xml nowplaying-info property CKOI-ÄÖÜ
http://gent/~eh/song.xml nowplaying-info property CKOI-ÄÖÜ
zilch The system cannot locate the object specified.
Src:
(3) Usar el DOM evita todos los problemas de codificación (es por eso que coloqué algunos diéresis alemanes en ''su'' archivo, que incluso llegó a la salida de DOS-Box) y hace que RegExps (incluso el de Perl) sea una segunda mejor opción.
Esta es mi publicación de fort en stackoverflow. He buscado muchas preguntas y respuestas similares en este sitio, pero mis condiciones parecen un poco diferentes. aquí está mi código vbscript:
------------ fragmento de código ---------------
xmlurl = "songs.xml"
set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
xmlDoc.loadXML(xmlurl)
if xmlDoc.parseError.errorcode<>0 then
''error handling code
msgbox("error! " & xmlDoc.parseError.reason)
end if
------------ fragmento de código final ---------------
XML:
<?xml version="1.0" encoding="UTF-8"?>
<nowplaying-info-list>
<nowplaying-info mountName="CKOIFMAAC" timestamp="1339771946" type="track">
<property name="track_artist_name"><![CDATA[CKOI]]></property>
<property name="cue_title"><![CDATA[HITMIX]]></property>
</nowplaying-info>
<nowplaying-info mountName="CKOIFMAAC" timestamp="1339771364" type="track">
<property name="track_artist_name"><![CDATA[AMYLIE]]></property>
<property name="cue_title"><![CDATA[LES FILLES]]></property>
</nowplaying-info>
<nowplaying-info mountName="CKOIFMAAC" timestamp="1339771149" type="track">
<property name="track_artist_name"><![CDATA[MIA MARTINA]]></property>
<property name="cue_title"><![CDATA[TOI ET MOI]]></property>
</nowplaying-info>
</nowplaying-info-list>
También traté de eliminar la primera línea en caso de que tal vez UTF-8 no fuera compatible con Windows (vi algunas publicaciones sobre esto), pero aún tengo el mismo error. También probé Unix2dos y viceversa en caso de que hubiera problemas de devolución de carro (caracteres ocultos incrustados en el xml). Simplemente no puedo entender lo que está mal. Es un archivo XML simole. Podría analizarlo en unos minutos usando Perl Regex, pero necesito ejecutar este script en Windows para usar vbscript. Utilizo la misma técnica para analizar XML de otras fuentes sin ningún problema. No puedo modificar el XML por desgracia, es de una fuente externa. Tengo exactamente el mismo error tanto en mi edición de inicio de Windows Vista como en Windows Server 2008. Estoy ejecutando el vbscript desde la línea de comandos para probar hasta ahora (es decir, no en ASP).
Gracias por adelantado,
Sam
xmlDoc.loadXML()
puede cargar una cadena XML. No puede recuperar una URL.
Use un objeto XMLHTTPRequest si necesita realizar una solicitud HTTP.
Function LoadXml(xmlurl)
Dim xmlhttp
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
xmlhttp.Open "GET", xmlurl, false
'' switch to manual error handling
On Error Resume Next
xmlhttp.Send
If err.number <> 0 Then
WScript.Echo xmlhttp.parseError.Reason
Err.Clear
End If
'' switch back to automatic error handling
On Error Goto 0
Set LoadXml = xmlhttp.ResponseXml
End Function
Usa como
Set doc = LoadXml("http://your.url/here")