none
XMLの文字データを範囲指定して検索する方法 RRS feed

  • 質問

  • VB2003 .Netで開発中です。

     

    XMLのデータに日付を保存するタグがあり、XPathを使用して、

    日付を範囲指定して情報をピックアップしたいと考えています。

    ところが、この日付、単なる文字列"2007/07/25"という形で保存しており、

    それを範囲指定(2007/07/01~2007/08/01 とか)により何とかピックアップできないか四苦八苦しております。

     

     色々やってみたところ、[ 日付='2007/07/25' ] で情報がヒットしてきましたが、

    [ 日付>='2007/07/25' ] とすると引っかかりません。

     

    そもそも数値でないので、論理記号が効くのかどうか疑問ですが、、、

     

    何かよい案、あるいは、条件式記号があれば、

    ご教授頂きたいと思います。

     

    よろしくお願いいたします。

     

     

    2007年7月25日 5:27

すべての返信

  • 例えば、

     

    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(日付,'/','') &gt;= '20070401']">
        <xsl:value-of select="." /><br />
      </xsl:for-each>
    </xsl:template>


    の XPath で取得できると思います。

     

    2007年7月26日 2:14
  • ご回答ありがとうございます。

     

    大変、基本的な質問で恥ずかしいのですが、

    早速試そうとしましたが、XsltContextのNew方法がよく分かりません。

    MicroSoftの例では、System.Xml.Sxl.SxltContextから派生したクラスをオーバーライドして、

    その中で処理を行っていますが、この場合もそうなるのでしょうか?

     

    お返事頂いた内容は、XSLTでの設定のようですが、

    スタイルシートは追加しないと出来ませんか?

     

    また、追加の質問ですが、

    指数表記'2.2E10'という文字列を数値として認識し、

    同様に範囲指定する方法がTranslate関数のように存在するのでしょうか?

     

    ご教授お願いいたします。

    2007年7月26日 5:28
  • ん?

    XSLT なんぞ、余計なものも書いたから混乱してます?

     

     msdn.bambino さんからの引用

    色々やってみたところ、[ 日付='2007/07/25' ] で情報がヒットしてきましたが、

    [ 日付>='2007/07/25' ] とすると引っかかりません。

     

    [ 日付>='2007/07/25' ] というところまではできているんですよね?XPath

    ここを、単純に

    [translate(日付, '/', '') >= '20070725']

    と書き換えることを示したのですが。

     

     msdn.bambino さんからの引用

    指数表記'2.2E10'という文字列を数値として認識し、

    同様に範囲指定する方法がTranslate関数のように存在するのでしょうか?

     

    指数表記は、XPath だけでは比較できないでしょう。

    C# か VB を使っているんですよね?

    でしたら XPath は使わずに、単純にノード値を取得して数値に変換して比較すればよろしいのでは?

     

    2007年7月26日 11:07
  • お返事ありがとうございます。

     

    日付の件ですが、私のケアレスミスが原因でした。

    申し訳ありません。

     

    指数に関しては、VBで書式<->数値ができるので、

    そういった機能の存在を期待したのですが、ないようですね。

     

    アドバイス大変助かりました。

    また何かありましたらよろしくお願いいたします。

     

    2007年7月27日 0:23