Разбор XML-строки, созданной из wsdl WebService в классическом ASP

Я хотел бы проанализировать XML-строку, которая генерируется запросом webservice. У меня есть строка:

<!--?xml version="1.0" encoding="utf-8"?-->
<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:body>
 <getpersonbysgidresponse xmlns="http://all.service.xxxxx.com">
 <getpersonbysgidreturn>
 <alternatecontactsgi xsi:nil="true">
 <birthdate>1986-11-14T22:00:00.327Z</birthdate>
 <birthdateokay>true</birthdateokay>
 <branchid>B78</branchid>
 <businessgroupid>R78E</businessgroupid>
 <contractenddate xsi:nil="true">
 <contractstartdate>2013-09-16T22:00:00.327Z</contractstartdate>
 <contractorcompanyname xsi:nil="true">
 <countryid>FRA</countryid>
 <delegationid>DLFRA</delegationid>
 <departmentname>xxx</departmentname>
 <departmentnumber>XXXXX</departmentnumber>
 <detailed>true</detailed>
 <divisionname>XXXXO - SIEGE SOCIAL</divisionname>
 <divisionnumber>31346</divisionnumber>
 <educationcompound xsi:nil="true">
 <employeeposition>N</employeeposition>
 <employeepositionlocal xsi:nil="true">
 <faxnumber xsi:nil="true">
 <filiereid>ADM</filiereid>
 <firstname>Lakhdar</firstname>
 <firstnameencoded xsi:nil="true">
 <firstnamepreferred xsi:nil="true">
 <fullname>Lakhdar XXXX</fullname>
 <inchargesgijuridic xsi:nil="true">
 <inchargesgimission xsi:nil="true">
 </inchargesgimission></inchargesgijuridic></firstnamepreferred></firstnameencoded></faxnumber></employeepositionlocal></educationcompound></contractorcompanyname></contractenddate></alternatecontactsgi></getpersonbysgidreturn>
 </getpersonbysgidresponse>
 </soapenv:body>
</soapenv:envelope>

Я должен добавить тег перед "Response.Write", чтобы увидеть XML как это (иначе строка будет просто конкатенацией всех атрибутов).

Я помещал эту строку в переменную "MyXml", и я пытаюсь ее разобрать следующим образом:

Dim objXML,objRoot ,I, thisNode,strID, strNarrative, thisChild, selectedNode,testStr

 Set objXML= Server.CreateObject("MSXML2.DOMDocument") 
 objXML.async = False 

 objXML.setProperty "SelectionLanguage", "XPath" 
 objXML.setProperty "SelectionNamespaces", "xmlns='http://all.service.xxxxx.com' " & _
 "xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' " & _
 "xmlns:xsd='http://www.w3.org/2001/XMLSchema' " & _
 "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "

 objXML.loadXML(myXML) 
 Set selectedNode= objXML.selectSingleNode("//soapenv:Envelope/soapenv:Body/getPersonBySgidResponse/getPersonBySgidReturn/getPersonBySgidReturn/divisionName")

 Set objRoot = objXML.documentElement 

 Response.Write " myXml == " & myXML
 Response.Write " objXML == " & objXML.Text 
 Response.Write " objRoot == " & objRoot.Text
 Response.Write " selectedNode == " & selectedNode.Text

Но на последней строке я получил ошибку: требуется объект.

Надеюсь, что я написал, имеет смысл :) Спасибо

1 ответ

Неверный XPath "//soapenv:Envelope/soapenv:Body/getPersonBySgidResponse/getPersonBySgidReturn/getPersonBySgidReturn/divisionName"

Удалите один getPersonBySgidReturn из XPath

Ваша строка кода должна быть

Set selectedNode= objXML.selectSingleNode("//soapenv:Envelope/soapenv:Body/getPersonBySgidResponse/getPersonBySgidReturn/divisionName")

licensed under cc by-sa 3.0 with attribution.