2011-02-01 90 views
4

可能性の重複:
String greater, less, and equal comparison in XmlDocumentXPathは "MSXML2.DOMDocument60" に "MSXML2.DOMDocument" 上で動作ではなく

こんにちは、VBAで I folowing発現を有する:

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

SourceXmlをMSXML2.DOMDocumentとして定義すると、所望のノード。 SourceXmlをMSXML2.DOMDocument60として定義すると、内部に0個の要素を含むリストが取得されます。

Xpath式でWhathが間違っていますか?

+1

はまず、あなたは属性とその要素をテストします。不思議です...しかし、主な問題は、 '>'と '<'比較演算子が数値に対してのみ定義されていることです。http://www.w3.org/TR/xpath/#booleansから*比較対象がどちらもノードセットと演算子が「<=', '<', '> = 'または'> 'の場合、オブジェクトは両方のオブジェクトを数値に変換し、IEEE 754 *に従って数値を比較することによって比較されます。これは重複していますが、私は今日甘やかされています... –

+1

重複した[XmlDocumentでStringより大きい、より小さい、そして同等の比較](http://stackoverflow.com/questions/4466494/string-greater- xmldocumentで比較して小さいと等しい) –

+0

良い質問、+1。問題の説明と推奨される解決方法については、私の答えを参照してください。 :) –

答えて

5

あなたがを提供しているの式:XPath 1.0の中で(数字のみのための)文字列には>または<比較演算子が存在しないため

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

は、任意のノードを選択しないだろう。上記の2つの文字列は、最初に数字に変換され、NaNとなり、NaNを含む任意の比較はfalse()となります。したがって、述部の値はfalse()であり、式はどのノードも選択しません。

MSXML2.DOMDocument.SelectNodes()は、ノードを選択し使用してMSXMLのこの初期のバージョンでは、デフォルトの選択言語は、XPathではありませんので、という事実が、「XSL」と呼ばれるもの(私はよく覚えている場合)、それは標準ではありません、W3CのXPath言語。

私はMSXML6がこの廃止された方言を提供していないと思います。あなたのケースでは

あなたは成功しこのXPath式を使用することができるかもしれない:

//Races/Race[/FirstRun 
       [translate(@ActStart,'-','') > 20110301 
      or 
       translate(ActEnd, '-','') < 20110315 
       ] 
      ] 
+0

チャームのように働いた!どうもありがとうございました。 – CaBieberach

+0

単なる質問です。 Xpathの一部またはDomDocumentから「翻訳」されていますか? – CaBieberach

+0

@CaBieberach:はい、 'translate()'は標準のXPath関数です。 –

関連する問題