XMLをOfficeで扱う: XMLスプレッドシート(XMLSS)形式 (2)

2004年06月06日(日)更新


■XMLスプレッドシート(XMLSS)形式の内容

たけち: 前回は【kajin2_XMLSS.xml】を例にXMLスプレッドシート(XMLSS)形式がどんなものかをみたよね。

さらら: そうね。今回は、【kajin2_XMLSS.xml】を使ってXSLTでHTMLに変換してみるんでしょ?!

たけち: うん、そうしよう。

さらら: でも、前回【kajin2_XMLSS.xml】を見たけど、なんだかいっぱいタグがあってどれをどう変換していいのか分からないわ。

たけち: そうだね。まず、肝心のデータがどこにあるかだけれど、よ〜く見ていくと、48〜94行目のTable要素とその子孫の要素がデータを持っていそうなところだよね。属性がたくさんあるから一見わかりにくいけれど、属性をとってみると、全体の構造が把握できるよ。

XMLスプレッドシートの例 【kajin2_XMLSS.xml】の一部

 48:   <Table
 49:   >
 50:    <Column />
 51:    <Column />
 52:    <Column />
 53:    <Column />
 54:    <Row>
 55:     <Cell><Data>id</Data><NamedCell
 56:       /></Cell>
 57:     <Cell><Data>name</Data><NamedCell
 58:       /></Cell>
 59:     <Cell><Data>age</Data><NamedCell
 60:       /></Cell>
 61:     <Cell><Data>address</Data><NamedCell
 62:       /></Cell>
 63:    </Row>
 64:    <Row>
 65:     <Cell><Data>1</Data><NamedCell
 66:       /></Cell>
 67:     <Cell><Data>大伴家持</Data><NamedCell
 68:       /></Cell>
 69:     <Cell><Data>36</Data><NamedCell
 70:       /></Cell>
 71:     <Cell><Data>yakamochi@example.com</Data><NamedCell
 72:       /></Cell>
 73:    </Row>
 74:    <Row>
 75:     <Cell><Data>2</Data><NamedCell
 76:       /></Cell>
 77:     <Cell><Data>額田王</Data><NamedCell
 78:       /></Cell>
 79:     <Cell><Data>28</Data><NamedCell
 80:       /></Cell>
 81:     <Cell><Data>nukata@example.com</Data><NamedCell
 82:       /></Cell>
 83:    </Row>
 84:    <Row>
 85:     <Cell><Data>3</Data><NamedCell
 86:       /></Cell>
 87:     <Cell><Data>柿本人麻呂</Data><NamedCell
 88:       /></Cell>
 89:     <Cell><Data>45</Data><NamedCell
 90:       /></Cell>
 91:     <Cell><Data>hitomaro@example.com</Data><NamedCell
 92:       /></Cell>
 93:    </Row>
 94:   </Table>


■XSLTの作成

たけち: こうして属性をはがしてみると、たいしてHTML/XHTMLのtable要素と違わないことがわかるよね。

さらら: う〜んと・・・XHTMLのtableにあたるのがTable要素で、XHTMLのtr要素にあたるのがRow要素になるわけね。

たけち: うん。td要素にあたる部分がややこしいけれど、Cell要素のData要素の中に、肝心のデータがあるわけなんだ。そもそもtrというのはtable rowの略だし、tdはtable dataの略なんだから、名前そのものだって、そんなに違うわけじゃないんだよ。それから、これらの要素は
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 というデフォルト名前空間に属していて、この名前空間は、
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 というssという接頭辞であらわされることが、3行目と6行目からわかるよね。

さらら: あ、そうなのね。こうしてみると、XHTMLのtable要素がちょっと複雑になっただけっていう気がするわ。

たけち: じゃあ、この構造を頭に入れた上でXSLTを書いてみようか。

さらら: えぇ。。。でも、このExcelのXMLスプレッドシート(XMLSS)形式のファイルにスタイルシート処理命令を書こうと思ったら、一度テキストエディタを立ち上げて、そこで書かないといけないのよねぇ。

たけち: そんなことをする必要はないよ。XSLTには他のファイルを読みに行くdocument関数というものがあったよね。それを利用すればいいんだから。

さらら: あ、そうか!

たけち: まず次のような【kajin_display.xml】を用意してみよう。

変換用XMLの例 【kajin_display.xml】

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="kajin_display.xsl" ?>
<kd:doc xmlns:kd="http:/example.com/kajin_display">
    <kd:title>万葉歌人の名簿</kd:title>
    <kd:data src="kajin2_XMLSS.xml" />
</kd:doc>


■【kajin_display.xsl】の内容

たけち: ここではWebページのタイトルを「万葉歌人の名簿」とし、そのデータを"kajin_XMLSS.xml"から持ってくることを示しているんだ。

さらら: はい。

たけち: じゃあ次にXSLT側を示すね。

XSLTの例 【kajin_display.xsl】

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:kd="http:/example.com/kajin_display"
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">

<xsl:template match="/">
  <html>
  <head><title>歌人の名簿</title></head>
  <body>
  <h1><xsl:value-of select="kd:doc/kd:title" /></h1>
  <xsl:apply-templates select="document(kd:doc/kd:data/@src)//ss:Table" />
  </body>
  </html>
</xsl:template>

<xsl:template match="ss:Table">
  <table border="1">
  <xsl:apply-templates select="ss:Row" />
  </table>
</xsl:template>

<xsl:template match="ss:Row[position()=1]">
  <tr>
  <xsl:apply-templates select="ss:Cell" mode="th" />
  </tr>
</xsl:template>

<xsl:template match="ss:Row">
  <tr>
  <xsl:apply-templates select="ss:Cell" mode="td" />
  </tr>
</xsl:template>

<xsl:template match="ss:Cell" mode="th">
  <th>
  <xsl:apply-templates select="ss:Data" />
  </th>
</xsl:template>

<xsl:template match="ss:Cell" mode="td">
  <td>
  <xsl:apply-templates select="ss:Data" />
  </td>
</xsl:template>

</xsl:stylesheet>


■【kajin_display.xml】による表示

たけち: 確認のために、これらのファイルの関係を図に示しておくね。

さらら: はい。

XMLスプレッドシート形式のデータの表示のためのファイルたち

さらら: なるほど・・・

たけち: じゃあ、この【kajin_display.xml】をInternet Explorerで表示してみよう。確認のために、これらのファイルの関係を図に示しておくね。

さらら: えぇ。どうなるのかしら。

【kajin_display.xml】の表示
【kajin_display.xml】の表示結果

さらら: あっ、見えた!!

たけち: これでExcelのデータを使って、Webページを表示することができたよね。

さらら: すご〜い (^ ^)

たけち: こういうふうに「XMLスプレッドシート(XMLSS)」形式のExcelファイルというのは、操作のしやすさや情報はExcel本来のxls形式に準じているし、XMLファイルだから、XMLを操作できるいろいろなツールで利用することができるわけで、利用の仕方というのはアイデア次第でいろいろなことが考えられるんだね。なかなか便利だから覚えておこうね。

さらら: は〜い。

→つづきます。 (^ ^;


このコーナーは、TAKABEさま(XSLT登竜門)の全面的なご協力をいただいて作成しています。