Web Artisan Blog - ウェブ アルチザン ブログ

XML:XSLT:XPATH:ロケーションパスを使ったデータ加工:child

XML (18 items)

2005年03月16日

(駄文)
当サイトではXMLの技術研究も行っているが、
現状、あまり人気のある(読まれる)記事ではない。
何でか??
XMLという言葉だけで、「難しい」・「訳わからん」、、
いや、それ以前に「興味ない」いう事であろうか。。

しかし、今後は今まで以上にXMLが色んな局面で重要視されてくるのは間違いない、
と当サイトでは考えている。
この辺のメモは、後々重宝される記事になり得るので、
人気云々は置いておいて、今後もメモしていこうと思う。

で、XMLデータの加工はXSLTをうまく使用すれば、
あれま!?と思うくらい簡単にできる。
今回もその一例をば。

とにかく、
「まあ、みなさん聞いてください(人生幸朗調)」
XMLってやりだすと面白いっすよ!


(本題)
XMLデータをXSLTで加工する際、XPATHを使う事で、
かなり容易にデータを取り出す事が出来る。
XPATHは、うまく使えば使うほど、その威力を強烈に発揮すると言えよう。

今回は、コンテキストノードの子要素を選択する”child::”を使って、
その使用方法の一例をメモする。
<例>
・XMLデータ(data11.xml)

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="data11.xsl"?>
<test>
 <user>
  <comcd>AAA</comcd>
  <count>3</count>
 </user>
 <user>
  <comcd>BBB</comcd>
  <count>5</count>
 </user>
 <user>
  <comcd>AAA</comcd>
  <count>1</count>
 </user>
 <user>
  <comcd>CCC</comcd>
  <count>4</count>
 </user>
 <user>
  <comcd>DDD</comcd>
  <count>2</count>
 </user>
</test>


このXMLデータから、comcdが"AAA"のcountの合計を取り出したい。
仮にSQLであれば、上記データをSUMやWHERE句を使って取り出すのであるが、
XMLでも、XPATHを使えば一発で取り出せる。


・XMLデータ(data11.xml)を編集するXSLT(data11.xsl)

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet 
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns="http://www.w3.org/1999/xhtml" version="1.0">
<xsl:output
 method="html" 
 version="1.0" 
 encoding="Shift_JIS" 
 omit-xml-declaration="yes"
 standalone="yes"
 doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
 doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" 
 indent="yes" 
 media-type="text/html"/>

<xsl:template match="/">

<!-- HTML出力部 -->
  <html>
  <head>
  <title>Result</title>
  </head>
  <body>

  <xsl:apply-templates />

<!-- HTML出力部 -->
  </body>
  </html>

</xsl:template> 

<xsl:template match="test">
    COMCDが"AAA"の合計は、
    「<xsl:value-of select="sum(./user[comcd='AAA']/child::count)" />」
</xsl:template> 

</xsl:stylesheet>



sum(./user[comcd='AAA']/child::count)
(1)”./user”
・・userノードの子要素全て(comcd、count)を選択
(2)”./user[comcd='AAA']”
・・userノードの子要素全てを選択、但しcomcdがAAAのもの
(3)”./user/child::count”
・・userノードの子要素count全てを選択
(4)”./user[comcd='AAA']/child::count”
・・userノードの子要素countを選択、但しcomcdがAAAのもの
(5)”sum(./user[comcd='AAA']/child::count)”
・・userノードの子要素countの合計を選択、但しcomcdがAAAのもの


・実行結果のHTML

<html>
<head>
<title>Result</title>
</head>
<body>
COMCDが"AAA"の合計は、「4」
</body>
</html>




■使用例のダウンロード
ダウンロードし、data11.xmlをブラウザで見る事で確認できます。

>>ダウンロード
※XSLTの動くブラウザでお試し下さい。IEであればIE6以上です。
前の記事 次の記事

Comments

コメントは、まだ書かれていません

Add Comments

Trackback

ステキアイテム特選 wrote:

HP作るの大変だから(XMLXSLTの巻き):
サイト運営について考えてました。本サイトですが、もともとインテリア&雑貨屋さんをやってみたいと思って始めました。お店と云うよりは、カタログ的なものを作っていきたいと考えています。アフィリエイトの形式で本サイト少し作ってみて気がついたのですが楽天ブログで...
2005年11月03日 10時48分43秒

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=449