VBScript, MSXML et les espaces de noms
Donné le code XML suivant:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetMsisdnResponse xmlns="http://my.domain.com/">
<GetMsisdnResult>
<RedirectUrl>http://my.domain.com/cw/DoIdentification.do2?sessionid=71de6551fc13e6625194</RedirectUrl>
</GetMsisdnResult>
</GetMsisdnResponse>
</soap:Body>
</soap:Envelope>
Je suis en train d'essayer d'accéder à la RedirectUrl élément à l'aide de XPath dans VBScript:
set xml = CreateObject("MSXML2.DOMDocument")
xml.async = false
xml.validateOnParse = false
xml.resolveExternals = false
xml.setProperty "SelectionLanguage", "XPath"
xml.setProperty "SelectionNamespaces", "xmlns:s='http://my.domain.com/' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'"
err.clear
on error resume next
xml.loadXML (xmlhttp.responseText)
if (err.number = 0) then
redirectUrl = xml.selectSingleNode("/soap:Envelope/soap:Body/s:GetMsisdnResponse/s:GetMsisdnResult/s:RedirectUrl").text
end if
mais c'est à défaut de trouver la RedirectUrl nœud, par conséquent, n'est rien quand j'essaie d'obtenir de la .texte de la propriété. Ce que je fais mal
puisque vous utilisez xmlhttp pourquoi ne pas récupérer l'xmlhttp ReceivedXML propriété qui retourne un objet DOMDocument? (Le serveur doit spécifier un xml mime type: text/xml dans le header Content-Type).
OriginalL'auteur Xetius | 2009-07-29
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le mauvais déclaration d'espace de noms.
Dans votre XML que vous avez
mais dans votre Script, vous utilisez
Cela fonctionne pour moi:
Sur une autre note -, je voudrais essayer de garder les lignes qui sont touchés par un
On Error Resume Next
déclaration lors d'une absolue minimum. Idéalement, c'est en effet pour une seule critique que la ligne (ou de vous envelopper la section critique dans unSub
). Cela rend le débogage beaucoup plus facile.Par exemple, il vous manque un
Set
déclaration dansSet redirectUrl = ...
. Cette échoue silencieusement lorsque SurError Resume Next
est sur.Essayer
Voir - pas de
On Error Resume Next
nécessaire.OriginalL'auteur Tomalak
Également noter que l'espace de noms est sensible à la casse, mais qu'au moins certains MSXML force il en minuscules.
Donc, si vous déclarez
xml.setProperty "SelectionNamespaces", "xmlns:SSS='http://my.domain.com/'"
et essayer
xml.selectSingleNode("/SSS:Envelope")
il peut échouer.Vous devez utiliser
xml.selectSingleNode("/sss:Envelope")
.Ou mieux à faire de vos espaces de noms en minuscules.
OriginalL'auteur David Steele