質問者
XMLの文字データを範囲指定して検索する方法

質問
-
VB2003 .Netで開発中です。
XMLのデータに日付を保存するタグがあり、XPathを使用して、
日付を範囲指定して情報をピックアップしたいと考えています。
ところが、この日付、単なる文字列"2007/07/25"という形で保存しており、
それを範囲指定(2007/07/01~2007/08/01 とか)により何とかピックアップできないか四苦八苦しております。
色々やってみたところ、[ 日付='2007/07/25' ] で情報がヒットしてきましたが、
[ 日付>='2007/07/25' ] とすると引っかかりません。
そもそも数値でないので、論理記号が効くのかどうか疑問ですが、、、
何かよい案、あるいは、条件式記号があれば、
ご教授頂きたいと思います。
よろしくお願いいたします。
すべての返信
-
例えば、
XML データが
XML Data<root>
<node>
<日付>2006/01/01</日付>
</node>
<node>
<日付>2007/04/01</日付>
</node>
<node>
<日付>2007/04/30</日付>
</node>
<node>
<日付>2007/05/01</日付>
</node>
<node>
<日付>2007/07/26</日付>
</node>
</root>の場合、
XSLT and XPath<xsl:template match="/">
<xsl:for-each select="root/node[translate(日付,'/','') >= '20070401']">
<xsl:value-of select="." /><br />
</xsl:for-each>
</xsl:template>の XPath で取得できると思います。
-
ご回答ありがとうございます。
大変、基本的な質問で恥ずかしいのですが、
早速試そうとしましたが、XsltContextのNew方法がよく分かりません。
MicroSoftの例では、System.Xml.Sxl.SxltContextから派生したクラスをオーバーライドして、
その中で処理を行っていますが、この場合もそうなるのでしょうか?
お返事頂いた内容は、XSLTでの設定のようですが、
スタイルシートは追加しないと出来ませんか?
また、追加の質問ですが、
指数表記'2.2E10'という文字列を数値として認識し、
同様に範囲指定する方法がTranslate関数のように存在するのでしょうか?
ご教授お願いいたします。
-
ん?
XSLT なんぞ、余計なものも書いたから混乱してます?
msdn.bambino さんからの引用 色々やってみたところ、[ 日付='2007/07/25' ] で情報がヒットしてきましたが、
[ 日付>='2007/07/25' ] とすると引っかかりません。
[ 日付>='2007/07/25' ] というところまではできているんですよね?XPath
ここを、単純に
[translate(日付, '/', '') >= '20070725']
と書き換えることを示したのですが。
msdn.bambino さんからの引用 指数表記'2.2E10'という文字列を数値として認識し、
同様に範囲指定する方法がTranslate関数のように存在するのでしょうか?
指数表記は、XPath だけでは比較できないでしょう。
C# か VB を使っているんですよね?
でしたら XPath は使わずに、単純にノード値を取得して数値に変換して比較すればよろしいのでは?