ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

XSL/XSLTコミュのXPathでの文字列大小比較

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。

先日、日付が'YYYY-MM-DD'で格納された属性値を現在日付と比較しようとして、

@date > '2005-07-28'

って書いたら、なぜか常にFalse。@dateの中身が'2005-08-01'でもFalseが返ってきました。

どうしてだろう・・・と思って色々調べたら、なんと、XPathでの文字列大小比較って、中身が数値を表す文字列以外では結果が保証されないんですね。初めて知りました。

結局その件は、日付の表現形式を'YYYYMMDD'と数値形式にして解決しましたが、なんでこんな仕様になっているのか、ご存知の方いらっしゃいませんか?

ちなみに参考にしたのはこのGoogleキャッシュです。
http://66.102.7.104/search?q=cache:AgiJrf4S5ycJ:www.chongluo.com/books/xml/xmlnut/ch09_06.htm+xpath+%22compare+strings%22&hl=ja

-- 以下引用 --
You can use the = and != comparison operators to check whether two strings are the same. You can also use the relational <, >, <=, and >= operators to compare strings, but unless both strings clearly represent numbers (e.g., "-7.5" or '54.2'), the results are unlikely to make sense. In general, you can't define any real notion of string order in Unicode without detailed knowledge of the language in which the string is written.

コメント(4)

> かわちょさん

ありがとうございます。
なるほど、falseになるのはそういう理由でしたか〜。
納得。

質問の仕方が悪かったのですが、私が知りたいのはもう一つ、「なぜ 1. の仕様になっているのか」ということでした。

文字列のまま比較してくれないのはなぜかなぁ、と。

知ったからといって何か変わるわけでもないんですが、何か理由があるのかな、と。

その方が実装しやすいからかな?

http://www.doraneko.org/xml/xpath10/19991116/Overview.html#booleans
http://www.doraneko.org/xml/xpath10/19991116/Overview.html#function-number
簡単にコメントしてしまいますが、
文字の大小を決める基準が人によって異なるからではないでしょうか?仮に、ある基準で文字列の大小を比較する実装を行っても、これがすべての言語にとって解とはならないでしょうし、Unicodeは文字コード順に順番が決まるほど単純なものではないでしょう。

たとえば、日本語で、高とハシゴの高では、どっちが文字コード通りの順番になっているのでしょうか?(未確認で言ってます)
> たぁぼさん

コメントさんくすです。(^^)

確かに人によって「大小」の基準は違うと思いますが、普通、文字の大小比較を行う際は文字コード順での比較を指すのです。

a〜zや、あ〜ん、など、順番があるような文字については文字コード上でもその順番に並んでいますし。

実際、xsl:sortは、文字コードによる並び替えを行っています。

今回の私の用途でも、文字コード順で充分だったのですが、XPath1.0では対応していなくて残念です・・・。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

XSL/XSLT 更新情報

XSL/XSLTのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング