あるXML文書の内容を、他のXML文書の中に取り込みたいと思う場合があります。
例えば、
-
XML文書にデフォルトで関連付けるXSLスタイルシートは、
<?xml-stylesheet ...> 擬似命令で1文書につき1ファイルしか指定できないが、
同じ文書を条件によって異なるスタイルシートでレンダリングしたい場合がある。
-
同じ構成の複数のXML文書(日記、事務記録など)
を1つのHTML文書にレンダリングしたい場合がある。
などなどです。
このページの方法はその解決策の1つでしかありませんが、
一応役にはたつと思います。
ここで載せるサンプルは、
業務システムの臨時処理、トラブルなどを記録する作業ログ、
といった感じのものから項目を抜粋したものです。
まずそのログである、XML文書(uylog.xml)です。
<?xml version="1.0" encoding="euc-jp" ?>
<document>
<title>作業履歴</title>
<entry>
<entry-date>2003/03/06</entry-date>
<system>勤務管理システム</system>
<status>対応完了</status>
<target>PG0032</target>
<description>
記録…(省略されました)
</description>
</entry>
<entry>
<entry-date>2003/03/06</entry-date>
<system>会議室予約システム</system>
<status>対応完了</status>
<target>PG0397</target>
<description>
記録…(省略されました)
</description>
</entry>
</document>
|
上のXML文書には、<?xml-stylesheet ...> 擬似命令がありません。
このファイルは直接XSLT変換されるのではなく、他のXML文書に取り込まれるデータになります。
というわけで、その取り込む側のXML文書です。
データの内容をそっくりコピーする、という意味で
「uylog-copy.xml」と名づけました。
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="uylog-copy.xsl"?>
<document>
<file href="./uylog.xml"/>
</document>
|
XSLスタイルシート「uylog-copy.xsl」を指定している以外は、特に何もしていません。
ここのdocumentやfileというタグの名前や、hrefという属性の名前は、
次に挙げるXSLスタイルシートの中のそれと対応づいていれば、どんな名前でも構いません。
このようなファイルを増殖させて、XSLスタイルシートの指定部を変更すれば、
別のシートでレンダリングさせることも簡単にできます。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" encoding="Shift_JIS" version="1.0"/>
<xsl:template match="/document">
<html><body>
<xsl:apply-templates select="file"/>
</body></html>
</xsl:template>
<xsl:template match="/document/file">
<xsl:variable name="doc" select='document(@href)' />
<xsl:variable name="xmluri"><xsl:value-of select="@href"/></xsl:variable>
<table border="1">
<tr bgcolor="#cccccc"><td>発生日</td><td>システム</td><td>対象処理</td></tr>
<xsl:for-each select="$doc//document/entry">
<tr>
<td><xsl:value-of select="entry-date"/></td>
<td><xsl:value-of select="system"/></td>
<td><xsl:value-of select="target"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
|
最後に、XSLスタイルシート「uylog-copy.xsl」です。
document関数を使って、
file要素のhref属性として渡されたパスをXMLドキュメントとして取り込んでいます。
file要素に対してapply-templateしているので、
XML文書の方でfileタグを複数並べれば、
複数のXML文書を順番にレンダリングして1つのHTML文書として出力することもできます。
(first uploaded 2003/03/07 last updated 2003/03/07, URANO398 - KQ TAURA)
|