XPath с пространством имен с VBS

#xml #xpath

#xml #xpath

Вопрос:

Я пытаюсь извлечь пару узлов из следующего xml:

 <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body>
      <CheckPersonResponse xmlns="http://test.net/crs/">
         <CheckPersonResult>
            <xml xmlns="http://test.com/webservices/crs2/">
               <requestid>933ca7df-6f25-49d9-8144-692e9f18cf27</requestid>
               <customernumber>xxx</customernumber>
               <reference>xx</reference>
               <product>xxx</product>
               <input>
                  <customernumber>xx</customernumber>
                  <reference>xx</reference>
                  <name>xx</name>
                  <initials>xx</initials>
                  <prefix>xx</prefix>
                  <gender>xx</gender>
                  <birthdate>xxx</birthdate>
                  <streetname>x</streetname>
                  <housenumber>x</housenumber>
                  <extension>Axx</extension>
                  <postcode>xx</postcode>
                  <city>xx</city>
                  <country />
                  <phonenumber1 />
                  <phonenumber2 />
                  <emailaddress />
                  <bankaccount />
                  <referencedate>xxx</referencedate>
                  <typeofclaim>xx</typeofclaim>
                  <claimdate>xxx</claimdate>
                  <claimamount>xx</claimamount>
               </input>
               <result>
                  <reference>xxx</reference>
                  <personalscore>0</personalscore>
                  <statisticalscore>0</statisticalscore>
                  <paymentscore>0</paymentscore>
                  <overallscore>0</overallscore>
                  <addressindicator />
               </result>
            </xml>
         </CheckPersonResult>
      </CheckPersonResponse>
   </soap:Body>
</soap:Envelope>
  

Где я хочу получить все узлы в теге <result> , как я могу выбрать все узлы с помощью XPath и использовать их в VBS?

Комментарии:

1. Об этом спрашивали много раз раньше. Поиск. (Не говоря уже о том, что в MSDN есть официальная документация, которая объясняет эти вещи.)

2. Я понимаю, что мне нужно установить xmlns, хотя с xpath xml: xml, даже если он не определен, он не возвращает ошибку…

3. Вы не показываете свой код, не объясняете, что вы пробовали, не ссылаетесь на сообщения об ошибках… И на этом сайте и в других местах в Интернете есть сотни готовых к копированию и вставке примеров кода, которые решают именно эту проблему. Действительно. Потратьте 20 минут на поиск, и вы наткнетесь по крайней мере на один, а возможно, и больше.

Ответ №1:

Найдено решение:

 namespaces = Array( _
  "xmlns:s='http://test.nl/webservices/crs2/'", _
  "xmlns:c='http:/test.net/crs/'", _
  "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'" _
)

xmlhttp.responseXML.setProperty "SelectionNamespaces", Join(namespaces, " ")

xpath = "/soap:Envelope/soap:Body/c:CheckPersonResponse/c:CheckPersonResult/s:xml/s:result/s:*"
Set NodeList = xmlhttp.responseXML.selectNodes(xpath)