2011-02-01 56 views
4

可能重複:
String greater, less, and equal comparison in XmlDocumentXPath的工作原理上的 「MSXML2.DOMDocument」 而無 「MSXML2.DOMDocument60」

嗨, 在VBA我有如下因素表達:

SourceXml.selectNodes("//Races/Race[/FirstRun[@ActStart>'2011-03-01' or 
@ActEnd<'2011-03-15']]") 

如果我將SourceXml定義爲MSXML2.DOMDocument,它將檢索帶有期望的節點。 如果我將SourceXml定義爲MSXML2.DOMDocument60,它將檢索一個包含0個元素的列表。

Wath與Xpath表達式錯誤嗎?

+1

首先,你測試一個屬性,然後一個元素。奇怪......但主要問題是````和`<``比較運算符只能爲數字定義:來自http://www.w3.org/TR/xpath/#booleans *當兩個對象都不能被比較時節點集和運算符爲`<=`, `<`, `> =`或`>`,則通過將兩個對象轉換爲數字並根據IEEE 754 *比較數字來比較對象。這是一個重複的,但我今天laizy ... – 2011-02-01 17:10:49

+1

我發現重複[字符串更大,更少,並在XmlDocument比較](http://stackoverflow.com/questions/4466494/string-greater- less-and-equal-comparison-in-xmldocument) – 2011-02-01 17:14:03

回答

5

您提供表達:

//Races/Race[/FirstRun[@ActStart>'2011-03-01' or ActEnd<'2011-03-15']] 

將不選擇任何節點,因爲在XPath 1.0中不存在><比較運算符字符串(僅用於數字)。上面的兩個字符串首先轉換爲數字,這會產生NaN,而涉及NaN的任何比較是false()。因此,謂詞的值是false(),表達式不會選擇任何節點。

事實上,使用MSXML2.DOMDocument.SelectNodes()選擇節點是因爲在MSXML的早期版本的缺省選擇語言不是XPath的但一些所謂的「XSL」(如果我記得很清楚),它是不是標準,W3C XPath語言。

我想MSXML6不再提供這種過時的方言。

你的情況,你也許能夠成功地使用XPath表達式:

//Races/Race[/FirstRun 
       [translate(@ActStart,'-','') > 20110301 
      or 
       translate(ActEnd, '-','') < 20110315 
       ] 
      ] 
相關問題