Ошибка SelectSingleNode в VBA

Я пытаюсь проанализировать возвращенный файл службы данных в VBA для Excel, и, хотя я просмотрел несколько полезных ответов на похожие вопросы, ни один из них, похоже, не заставляет SelectSingleNode что-либо возвращать для меня.

XML-файл довольно большой, но узлы-оболочки такие:

<?xml version="1.0" encoding="utf-8"?>
<feed xml:base="https://___.bpmonline.com/0/ServiceModel/EntityDataService.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <title type="text">labQuoteCollection</title>
    ...
</feed>

Мой соответствующий код VBA находится здесь (я знаю, что некоторые из этих свойств избыточны, просто пытаюсь быть уверенным):

Dim NS As String
NS = "xmlns:a=""http://www.w3.org/2005/Atom"" xmlns:d=""http://schemas.microsoft.com/ado/2007/08/dataservices"" xmlns:m=""http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"""
Dim QuoteData As String
Dim oXMLReq As New WinHttp.WinHttpRequest
Dim oXMLDoc As New MSXML2.DOMDocument60
With oXMLHTTP
    .Open "GET", DataURL, False
    .setRequestHeader "Cookie", AuthCookie
    .send

    QuoteData = .responseXML.XML
    oXMLDoc.LoadXML QuoteData
    oXMLDoc.setProperty "SelectionLanguage", "XPath"
    oXMLDoc.setProperty "SelectionNamespaces", NS
    oXMLDoc.resolveExternals = True
    Debug.Print (oXMLDoc.parseError.ErrorCode)
    Debug.Print oXMLDoc.XML
    Dim Quotes As IXMLDOMNode
    Quotes = oXMLDoc.SelectSingleNode("//a:feed")
    If Quotes Is Nothing Then
        Debug.Print "fail"
    End If
End With

Я вижу, что XML загружается в oXMLDoc без ошибок, и оператор Print выводит его полностью, но ни один из запросов XPath, которые я пытался выполнить, ничего не вернул. Другие вопросы, которые я видел по этой теме, предполагают, что приведенный выше запрос верен; может я что-то еще упускаю?


person WPBird    schedule 06.03.2019    source источник
comment
Вероятно, отсутствует пространство имен   -  person QHarr    schedule 06.03.2019
comment
@QHarr В XML или свойстве SelectionNamespaces? Элемент фида, насколько я понимаю, должен использовать пространство имен по умолчанию (xmlns=w3.org/2005/ Atom), который я попытался сопоставить с префиксом 'a' в коде.   -  person WPBird    schedule 06.03.2019


Ответы (1)


Quotes = oXMLDoc.SelectSingleNode("//a:feed")

должно быть

Set Quotes = oXMLDoc.SelectSingleNode("//a:feed")

Сообщение об ошибке вводит в заблуждение, поскольку оно выглядит так, будто цель xpath не найдена, но если это произойдет, оно не вызывает ошибку, а просто возвращает Nothing

person Tim Williams    schedule 06.03.2019
comment
Отлично, спасибо. (К счастью, это будет единственный раз, когда мне придется работать в VBA...) - person WPBird; 07.03.2019