目前我正在使用Xpath表達式從Excel VBA代碼中的XML文檔中檢索一些數據。我的目標是從XML中檢索唯一的ID。這是我嘗試的xpath表達式。Excel VBA XPath表達式錯誤 - 期望的標記')'找到':'
//u:UserID[not(. = following::u:UserID/.)]
我試着使用記事本++ xml插件的Xpath,它完美的工作。但是,這不適用於MS-EXCEL VBA中的MSXML文檔,並引發以下錯誤。
Expected token ')' found ':'.
根據this post這說明Martin Honnen是因爲XPath 2.0中的功能並不在Microsoft XSLT處理器支持。
有人可以指導我如何轉換上面的XPath表達式從XPath 2.0到XPath 1.0?
由於提前, Prasaz
請看以下示例代碼。
示例XML:
<u:root name="user" xmlns:u="http://example.com/user">
<u:Transactions>
<u:Transaction>
<u:TransactionID>1</u:TransactionID>
<u:FUser>
<u:UserTypeID>270</u:UserTypeID>
<u:UserID>67</u:UserID>
<u:Username>User67</u:Username>
</u:FUser>
<u:TUser>
<u:UserTypeID>202</u:UserTypeID>
<u:UserID>16</u:UserID>
<u:Username>User16</u:Username>
</u:TUser>
</u:Transaction>
<u:Transaction>
<u:TransactionID>2</u:TransactionID>
<u:FUser>
<u:UserTypeID>267</u:UserTypeID>
<u:UserID>64</u:UserID>
<u:Username>User64</u:Username>
</u:FUser>
<u:TUser>
<u:UserTypeID>202</u:UserTypeID>
<u:UserID>16</u:UserID>
<u:Username>User16</u:Username>
</u:TUser>
</u:Transaction>
</u:Transactions>
示例VBA
Private userXMLDocument As DOMDocument
Set userXMLDocument= New DOMDocument
// Code loading data data to the userXMLDocument
// Once done,
Dim xmlNodeList As MSXML2.IXMLDOMNodeList
//Next line generates the error
Set xmlNodeList = userXMLDocument.SelectNodes("//u:UserID[not(.= following::u:UserID/.)]")
您的XPath似乎並不使用XPath 2.0的特定功能,我懷疑這只是一個使用命名空間前綴的問題('U:')。也許在這個XPath周圍發佈一些相關的VBA代碼可以幫助我們進一步診斷問題 – har07 2014-09-24 07:33:19
XPath 1.0中的路徑表達式很好。你能發佈你的代碼嗎? – 2014-09-24 07:33:53
這可能是VBA中的XPath引擎無法識別'following ::'軸。這會讓我感到驚訝,但是如果你刪除了'following ::'部分,看看它是否仍然顯示錯誤。 – JLRishe 2014-09-24 08:01:26