« ☆XML型フィールドとXQUERY | トップページ | ■同期編集モード »

■XQUERYってややこしいっ!

XQUERYのサンプルって、階層がきちんと揃ったものは、結構あるのですが、 次のような階層が自由なものについては、なかなか見つけられないですね。
(こういうのは、XMLデータとしてふさわしくないのかな)

<?xml version="1.0" ?>
<koumoku>
  <item text="AAA" id="1">
    <item text="BBB" id="2">
      <item text="CCC" id="3" />
      <item text="DDD" id="4" />
    </item>
    <item text="EEE" id="5">
      <item text="FFF" id="6">
        <item text="GGG" id="7" />
        <item text="HHH" id="8" />
      </item>
    </item>
  </item>
</koumoku>

このXMLから、属性idを検索して、属性textの値を取得するのに丸一日悩んでました。 Delphiとはあまり関係ないのですが、せっかくなので書いておきますね。
(Microsoft SQL Server: SQL Server 2005 Express EditionのXML型に格納)

SELECT TREEXML.query('
for $RESULT1 in //item[@id=8], 
$RESULT2 in (data($RESULT1/@text)) return $RESULT2')
FROM dbo.KUBUN
結果として 属性id 8を持つアイテムの属性text HHH を取得できます。

アプリケーションからデータベースを操作する上で、親ノードを調べたり、更新等を考えるとXML型のメリットってなんだろうと疑問に思ってしまいます。今までも、再帰処理により階層データを扱ってきたんだし、100歩譲ってXML型にしても、文字型にそのまま出し入れするだけでもいいような気になってます。もっともっと、基本から勉強しないといけないですね。


XQUERYについて
XQuery 1.0: An XML Query Language
W3C Recommendation 23 January 2007
XQuery Update Facility
W3C Working Draft 11 July 2006

|

« ☆XML型フィールドとXQUERY | トップページ | ■同期編集モード »