带反斜杠的xpath查询返回空

时间:2019-04-30 17:09:21

标签: excel vba xpath

我正在尝试使用XPath谓词在excel中选择单个MSXML2节点。当我提供没有反斜杠的字符串时,我可以选择它。但是,一旦我尝试使用文件路径字符串,该表达式就不会返回任何内容。

这是我的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)

这将返回null:

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 个答案:

答案 0 :(得分:1)

我认为您的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