запрос xpath с обратной косой чертой возвращает пустой - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь выбрать один узел MSXML2 в Excel, используя предикаты XPath.Я в состоянии выбрать его просто отлично, когда я поставляю строку без обратной косой черты.Но как только я пытаюсь использовать строку пути к файлу, выражение ничего не возвращает.

Вот мой XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Directory>
<Document>
    <Path/>
    <Status/>
    <Notes/>
</Document>
<Document>
    <Path>C:\Users\Ivelin\Desktop\Workspace\Requests\File.xlsm</Path>
    <Status>Started</Status>
    <Notes/></Document>
<Document>
    <Path>TEST</Path>
    <Status>Started</Status>
    <Notes/>
</Document>
</Directory>

Это работает:

Dim Stat As IXMLDOMNode
Dim strPath
strPath = "/Directory/Document[Path='TEST']/Status/text()"
MsgBox (strPath)
Set Stat = XDoc.SelectSingleNode(strPath) 
MsgBox (Stat.NodeValue)

Этовозвращает ноль:

Dim Stat As IXMLDOMNode
Dim strPath
strPath = "/Directory/Document[Path='C:\Users\Ivelin\Desktop\Workspace\Requests\File.xlsm']/Status/text()"
MsgBox (strPath)
Set Stat = XDoc.SelectSingleNode(strPath) 
MsgBox (Stat.NodeValue)

Я пробовал разные предложения, двойные обратные косые черты и т. д., но безуспешно.Так как меня интересуют имена файлов / пути, у меня нет другого выбора, кроме как использовать обратную косую черту.

Любые указатели о том, как решить эту проблему, приветствуются.

1 Ответ

1 голос
/ 30 апреля 2019

Я не вижу ничего плохого в вашем xpath.Возможно, ошибка лежит в другом месте.Я использовал следующую загрузку вашего xml из файла;нет проблем.

Option Explicit

Public Sub test()
    Dim xmlDoc As Object, item As Object
    Set xmlDoc = CreateObject("MSXML2.DOMDocument") 'New MSXML2.DOMDocument60
    With xmlDoc
        .validateOnParse = True
        .setProperty "SelectionLanguage", "XPath"
        .async = False
        If Not .Load("C:\Users\User\Desktop\Test.xml") Then
            Err.Raise .parseError.ErrorCode, , .parseError.reason
        End If
    End With
    Dim path As String
    path = "/Directory/Document[Path='C:\Users\Ivelin\Desktop\Workspace\Requests\File.xlsm']/Status/text()"
    Set item = xmlDoc.SelectSingleNode(path)
    Debug.Print item.Text
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...