トップ回答者
XMLファイルを複数のキーを元にソートする方法

質問
回答
-
こうゆうことでしょうか?
Code SnippetDim 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に関しては、この辺が分かりやすいかと思います。
すべての返信
-
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"/>
こんなかんじになると思います。でも、ちと自信ない・・・
あ、顔文字になっちゃうので「:」を全角にしてます。
-
私が参照したページは次の通りです
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ソートキー・・・という具合に複数設定し、
ソートを行いたいと考えています。
よろしくお願いいたします。
-
こうゆうことでしょうか?
Code SnippetDim 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に関しては、この辺が分かりやすいかと思います。