kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

XSLTではまる

お仕事で作っているサポート情報一覧、いい加減情報が増えてきたので、html直すのも面倒になってきました。そこで重い腰を上げて、XMLでなんとかしようと。BiglobeホスティングはCGIがちょっと貧弱環境なので、ASP.NETなんて夢のまた夢。使えれば楽なんですけど。Perl 5.8勉強する?
あきらめてExpression Webでhtmlを直そうかと思ったら…なんとXML+XSLTの編集機能があるじゃないですか。そこで使ってみました(Sharepoint Designerにもあります)。

  1. データビューから「データビューの挿入」でxmlファイルを探してくれます
  2. データバインドする項目を選べばXSLTまで作ってくれます。それをぽとぺたするだけ

ところが、私の作っているものはサポート情報なので、リンクが欲しい。そうなるとXSLTを見るしかないようです…自動生成ではこんなXMLに対して、こんなXSLTを作ってくれました。

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Infomation>
  <Item Name="Info:001" Date="2007/11/1" Summary="最初の告知" Url="fixlist001.html"/>
  <Item Name="Info:002" Date="2007/11/2" Summary="次の告知" Url="fixlist002.html"/>
</Infomation>
(略)
    <xsl:template name="dvt_1.body">
        <xsl:param name="Rows"/>
        <xsl:param name="FirstRow"/>
        <xsl:param name="LastRow"/>
        <xsl:for-each select="$Rows">
            <xsl:variable name="KeepItemsTogether" select="false()"/>
            <xsl:variable name="HideGroupDetail" select="false()"/>
            <xsl:variable name="GroupStyle" select="'auto'"/>
            <xsl:if test="true()">
                <xsl:if test="not($HideGroupDetail)" ddwrt:cf_ignore="1">
                    <tr style="display:{$GroupStyle}">
                        <td class="ms-vb">
                            <xsl:value-of select="@Name"/>
                        </td>
                        <td class="ms-vb">
                            <xsl:value-of select="@Date"/>
                        </td>
                        <td class="ms-vb">
                            <xsl:value-of select="@Summary"/>
                        </td></tr>
                </xsl:if>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>
(略)

これがこうなってほしい。教えてgooでちょうどいいところを発見。参考になるかな?

管理番号 発行日 概要
Info:001(ここはurlのリンクになる) 2007/11/1 最初の告知
Info:002 2007/11/2 次の告知

実際はソートするか、xmlを配慮しますけどね。今回初めてといっていいくらいXSLTを見たんですが…奥深いんですね。それこそFizzBuzzがかけるくらいの事まで出来そうです。