none
XMLファイルを複数のキーを元にソートする方法 RRS feed

  • 質問

  • 投稿場所が違うかもしれませんが、Visual Basic.Net 2003でXMLファイルを使用したWebアプリケーションを開発中です。

    今、XMLファイルを複数のキーを元にソートしようと思っています。

    ソート方法は、分かったのですが、複数のキーを設定する方法が分かりません。

    初心者故に、基本的なことが理解出来ていないところもありますが、ご教授願えますでしょうか。

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

     

    動作環境は次の通りです。

    OS:WINDOWS XP,2000 

    IIS:5.0

    .NET:1.1.4322

     

    2007年5月2日 2:37

回答

  • こうゆうことでしょうか? 

    Code Snippet

    Dim expr As System.Xml.XPath.XPathExpression = nav.Compile("/Books/Book")

    expr.AddSort("Publisher", System.Xml.XPath.XmlSortOrder.Ascending, System.Xml.XPath.XmlCaseOrder.None, "", Xml.XPath.XmlDataType.Text)

    expr.AddSort("Title", System.Xml.XPath.XmlSortOrder.Ascending, System.Xml.XPath.XmlCaseOrder.None, "", Xml.XPath.XmlDataType.Text)

     

    ご提示のリンクのサンプルで、Publisher-Title順に並び替えるとしたら上記のようになると思います。

    XSLTとXPathの関係をイメージしていれば、ここでキーブレイク順にAddSortをすりゃいいんだなと閃くのではないでしょうか。

     

    XSLTやXPathに関しては、この辺が分かりやすいかと思います。

    http://www.atmarkit.co.jp/fxml/indexes/index_all.html#sp12

    2007年5月7日 6:56

すべての返信

  • xslでのソートでいいんでしょうか?

    sortをキーブレイク順に書いていけばOKだったような・・・。

     

    例えば、属性にcategoryとpriceがあったとして、それを category-price順にソートするとしたら

     

    <xsl:sort select="./@category" data-type="text" order="ascending"/>

    <xsl:sort select="./@price" data-type="number" order="ascending"/>

     

    こんなかんじになると思います。でも、ちと自信ない・・・

    あ、顔文字になっちゃうので「:」を全角にしてます。

    2007年5月2日 6:17
  • >xslでのソートでいいんでしょうか?

     

    XPathを使用して行おうと思っています。

     

    Microsoftの例では、Compileでキーを指定して

    AddSortしているように見えますが、

    複数キーが存在した場合、どうなるのか方法がいまひとつはっきりしません。

     

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

    2007年5月2日 6:52
  •  R.Kume さんからの引用

    Microsoftの例では、Compileでキーを指定して

    AddSortしているように見えますが、

     

    R.Kume さんがご参考にしている箇所を提示なさった方がよろしいのではないかと思います。

    2007年5月2日 9:18
  • 私が参照したページは次の通りです

    http://support.microsoft.com/kb/317084/ja

     

    ソースを抜粋いたしますと、

     

    Dim expr As System.Xml.XPath.XPathExpression = nav.Compile("/Books/Book/Title")

     

    ↑恐らく、この部分でキーを設定している


     expr.AddSort(".", System.Xml.XPath.XmlSortOrder.Ascending, System.Xml.XPath.XmlCaseOrder.None, "", Xml.XPath.XmlDataType.Text)

     

     ↑ソート条件を指定してソートを実行

     

    上記のように認識しているのですが、Compile()にて、第1ソートキー、第2ソートキー・・・という具合に複数設定し、

    ソートを行いたいと考えています。

     

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

    2007年5月7日 2:12
  • こうゆうことでしょうか? 

    Code Snippet

    Dim expr As System.Xml.XPath.XPathExpression = nav.Compile("/Books/Book")

    expr.AddSort("Publisher", System.Xml.XPath.XmlSortOrder.Ascending, System.Xml.XPath.XmlCaseOrder.None, "", Xml.XPath.XmlDataType.Text)

    expr.AddSort("Title", System.Xml.XPath.XmlSortOrder.Ascending, System.Xml.XPath.XmlCaseOrder.None, "", Xml.XPath.XmlDataType.Text)

     

    ご提示のリンクのサンプルで、Publisher-Title順に並び替えるとしたら上記のようになると思います。

    XSLTとXPathの関係をイメージしていれば、ここでキーブレイク順にAddSortをすりゃいいんだなと閃くのではないでしょうか。

     

    XSLTやXPathに関しては、この辺が分かりやすいかと思います。

    http://www.atmarkit.co.jp/fxml/indexes/index_all.html#sp12

    2007年5月7日 6:56
  • 複数の項目でソートすることが出来ました。

     

    また、参考図書の紹介もして頂きありがとうございました。

    2007年5月9日 0:44