http://ja.wikipedia.org/wiki/XSL_Transformations
いろいろなことができる.
しかし,それは,いろいろ指定しないと動かないということ
読み込んだXMLを,HTMLに成形して出力(リスト形式)
<results group="A">
<match>
<date>10-Jun-1998</date>
<team score="2">Brazil</team>
<team score="1">Scotland</team>
</match>
<match>
<date>10-Jun-1998</date>
<team score="2">Morocco</team>
<team score="2">Norway</team>
</match>
</results>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!-- "results" に対する操作 -->
<xsl:template match="results">
<html>
<head><title>
Results of Group <xsl:value-of select="@group"/>
</title></head>
<body><h1>
Results of Group <xsl:value-of select="@group"/>
</h1>
<xsl:apply-templates/>
</body></html>
</xsl:template>
<!-- "match" に対する操作 -->
<xsl:template match="match">
<h2>
<xsl:value-of select="team[1]"/>
versus
<xsl:value-of select="team[2]"/>
</h2>
<p>Played on <xsl:value-of select="date"/></p>
<p>Result:
<xsl:value-of select="team[1] "/>
<xsl:value-of select="team[1]/@score"/>,
<xsl:value-of select="team[2] "/>
<xsl:value-of select="team[2]/@score"/>
</p>
</xsl:template>
</xsl:transform>
読み込んだXMLを,HTMLに成形して出力(表形式)
→例1と同じ入力から,異なる出力を生成
<results group="A">
<match>
<date>10-Jun-1998</date>
<team score="2">Brazil</team>
<team score="1">Scotland</team>
</match>
<match>
<date>10-Jun-1998</date>
<team score="2">Morocco</team>
<team score="2">Norway</team>
</match>
</results>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:variable name="teams" select="//team[not(.=preceding::team)]"/>
<xsl:variable name="matches" select="//match"/>
<!-- "results" に対する操作 -->
<xsl:template match="results">
<html><body>
<h1>Results of Group <xsl:value-of select="@group"/></h1>
<table cellpadding="5">
<tr>
<td>Team</td>
<td>Played</td>
<td>Won</td>
<td>Drawn</td>
<td>Lost</td>
<td>For</td>
<td>Against</td>
</tr>
<xsl:for-each select="$teams">
<xsl:variable name="this" select="."/>
<xsl:variable name="played" select="count($matches[team=$this])"/>
<xsl:variable name="won"
select="count($matches[team[.=$this]/@score > team[.!=$this]/@score])"/>
<xsl:variable name="lost"
select="count($matches[team[.=$this]/@score < team[.!=$this]/@score])"/>
<xsl:variable name="drawn"
select="count($matches[team[.=$this]/@score = team[.!=$this]/@score])"/>
<xsl:variable name="for"
select="sum($matches/team[.=current()]/@score)"/>
<xsl:variable name="against"
select="sum($matches[team=current()]/team/@score) - $for"/>
<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select="$played"/></td>
<td><xsl:value-of select="$won"/></td>
<td><xsl:value-of select="$drawn"/></td>
<td><xsl:value-of select="$lost"/></td>
<td><xsl:value-of select="$for"/></td>
<td><xsl:value-of select="$against"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:transform>
<pc>
<CPUS>
<CPU>
<MANUFACTURE>INTEL</MANUFACTURE>
<MODEL>Pentium III</MODEL>
<CLOCK UNIT="MHz">700</CLOCK>
</CPU>
</CPUS>
<MEMORIES>
<TYPE>SDRAM</TYPE>
<MANUFACTURE>Micron</MANUFACTURE>
<MEMORY UNIT="MB">256</MEMORY>
</MEMORIES>
<HDD>
<MANUFACTURE>Quantum</MANUFACTURE>
<CAPACITY UNIT="GB">20.4</CAPACITY>
</HDD>
</PC>
http://ja.wikipedia.org/wiki/XQuery
いろいろなことができる.
しかし,それは,いろいろ指定しないと動かないということ
XQueryの基本的(かつ特徴的)な表現式
for $変数名 in 式
let $変数名 in 式
where 式
order by 式
return 式
2つのXML文書を結合して情報を検索する表現式
for $parts := doc("parts.xml")//part
for $price := doc("pricelist.xml")//price
where string($price/@partref) = string($parts/@id)
order by $price/ descending
return $price
業務内容に応じて,要求仕様や開発段階ごとに使い分けることが重要
XMLの代表的な処理方法
ためになる(と思われる ;-)資料: