- - PR -
XMLファイルのソーティング
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-05-14 14:51
以下のようなXMLを要素INの属性idで昇順に
ソートしようと考えています。 --------------------------------------- <OUT xmlns="http://...."> <IN id="10">a</IN> <IN id="5">b</IN> </OUT> --------------------------------------- 以下のようなXSLを作成してMSXSL.exeを使 用してソート済みXMLファイルを取得しよう としました。 --------------------------------------- <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:template match="OUT"> <OUT xmlns="http://...."> <xsl:for-each select="IN"> <xsl:sort select="@id" order="ascending"/> <xsl:copy-of select="."/> </xsl:for-each> </OUT> </xsl:template> </xsl:stylesheet> --------------------------------------- しかしOUT要素に「xmlns」がある場合、OUT 要素をマッチして取得することができませ ん。「xmlns="http://...."」を除いて実行 すれば上手くいきました。 「xmlns="http://...."」を含めたままソー トする方法をご存知でしたら教えてくださ い。どうぞよろしくお願いいたします。 |
|
投稿日時: 2003-05-14 17:00
くりごんさん、こんにちは。
この場合、何故マッチしないかというと <OUT xmlns="http://...."> <IN id="10">a</IN> <IN id="5">b</IN> </OUT> のOUTやINのようなノードは、デフォルト名前空間を使っているため"http://...."の名前空間に属しているのに対し、 <xsl:template match="OUT"> <xsl:for-each select="IN"> は名前空間で修飾されないOUTやINのノードを示すためにマッチできないことになるわけです。 一つの解決策としては、以下のようなスタイルシートはいかがでしょうか? <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" exclude-result-prefixes="ex" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://...." xmlns:ex="http://...."> <xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:template match="ex:OUT"> <OUT> <xsl:for-each select="ex:IN"> <xsl:sort select="@id" order="ascending"/> <xsl:copy-of select="."/> </xsl:for-each> </OUT> </xsl:template> </xsl:stylesheet> 注) xmlns="http://...." xmlns:ex="http://...."> が指定する2つの名前空間は同一のものです |
|
投稿日時: 2003-05-14 20:03
TAKABE様
ご返事ありがとうございます!!! 無事解決できました。 |
1