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

XML:XSLT:XPATH:ロケーションパスで条件指定して子要素を取得する

XML (18 items)

2005年01月21日

Research Artisan Pro ←リサーチアルチザンがパワーアップして復活しました!!
XMLデータを扱う際に”XPATH”を有効に利用すれば、
かなり容易にデータ編集できる。
それは、XPATHに関数が用意されている事も要因の一つと言えるが、
XPATHの「パス表現」をうまく利用するだけでも効果は絶大である。
<使用例>
・XMLデータ(data9.xml)

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="data9.xsl"?>
<test>
<data>A</data>
<data>B<countflg>W</countflg></data>
<data>C<countflg>X</countflg></data>
<data>D</data>
<data>E<countflg>Y</countflg></data>
</test>



・XMLデータを編集するXSLT(data9.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="test">
  TOTAL:
  <xsl:value-of select="count(./data)" />
  <br />・・(1)
  FLGTOTAL:
  <xsl:value-of select="count(./data[countflg])" />
  <br />・・(2)
  FLGTOTAL="W":
  <xsl:value-of select="count(./data[countflg=&quot;W&quot;])" />
  <br />・・(3)

</xsl:stylesheet>



(1)
count関数では、ノード数を取得できる。
上記例では、testノードの子要素dataノードの総数を取得している。
総数は、5。

(2)
ここで重要なパス表現が、”./data[countflg]”
”data[countflg]”と表現する事で、
dataノードの子要素にcountflgノードが1つ以上あるものを選択する事になる。
このロケーションパス表現をcount関数の引数に指定する事で、
”dataノードの子要素にcountflgノードが1つ以上あるものの総数”を取得している。
総数は、3。

(3)
(2)の表現に、更にcountflgが”W”のものだけという条件をつける場合は、
”count(./data[countflg=&quot;W&quot;])”となる。
注意点としては、XSLTもXMLなので”W”を括るダブルクォーテーションは、
特殊文字”&quot”で表現しないといけない。
総数は、1。

・生成したHTML

<html>
<head>
<title>Result</title>
</head>
<body>
TOTAL:5
<br />
FLGTOTAL:3
<br />
FLGTOTAL="W":1
<br />
</body>
</html>




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

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

Comments

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

Add Comments

Trackback

トラックバックはありません

Trackback URL

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