フォームの入力xmlがあります
<content xml:lang="en" xmlns:w="http://www.w.com/sch/W">
<w:firstRowHeader>true</w:firstRowHeader>
<w:firstColumnHeader>true</w:firstColumnHeader>
<w:customTable>
<w:tableContent>
<w:row>
<w:cell>
<w:spanInfo backgroundColor="Yellow" columnWidth="5" isRowHeader="true"/>
<text>ghnmghmg</text>
</w:cell>
<w:cell>
<w:spanInfo backgroundColor="Yellow" isRowHeader="false"/>
<text>ghmhgmgm</text>
</w:cell>
</w:row>
<w:row>
<w:cell>
<w:spanInfo backgroundColor="Yellow" columnWidth="5" isRowHeader="false"/>
<text>vj</text>
</w:cell>
<w:cell>
<w:spanInfo columnWidth="5" isRowHeader="true"/>
<text>mm</text>
</w:cell>
</w:row>
</w:tableContent>
</w:customTable>
</content>
これは、次のようなxmlに変換する必要があります。
- w:tableContentがtablecontentにマップされ、
- 次に、tablecontentタグ「table」の下に「tbody」タグが作成されます
- w:行はtrタグにマップされます
- w:tdタグにマップされたセル
- 条件は次のようなものです
- w:rowの最初のw:cell要素のみが属性isRowHeaderを「true」として持つ場合、それぞれの「tr」タグの下にあるすべての「td」要素には「strong」タグが含まれ、2番目のw:cellのisRowHeaderは無視されます。
- w:firstRowHeaderが「true」の場合、変換されたテーブルには太字の1行目のテキストが含まれている必要があります。つまり、テーブルの1行目のすべての「td」タグには「strong」タグが含まれている必要があります。
- w:firstColumnHeaderが「true」の場合、変換されたテーブルの最初の列のテキストは太字である必要があります。つまり、テーブルのすべてのtrタグの最初の「td」タグには「strong」タグが含まれている必要があります。
変換されたxml:
<content>
<tablecontent>
<table cellspacing="1" cellpadding="1" border="1" style="WIDTH: 100%" title="Title" xmlns="http://www.w3.org/1999/xhtml">
<tbody>
<tr>
<td style="BACKGROUND-COLOR: Yellow; WIDTH: 5%"><strong>ghnmghmg</strong></td>
<td style="BACKGROUND-COLOR: Yellow"><strong>ghmhgmgm</strong></td>
</tr>
<tr>
<td style="BACKGROUND-COLOR: Yellow; WIDTH: 5%">vj</td>
<td style="WIDTH: 5%">mm</td>
</tr>
</tbody>
</table>
</tablecontent>
</content>
これは私が試したxsltテンプレートですが、これらの「強力な」タグを実装する方法を理解できません...
XSLT:
<xsl:template match="w:tableContent">
<xsl:variable name="var3" select="../w:firstRowHeader"/>
<xsl:variable name="var4" select="../w:firstColumnHeader"/>
<tablecontent>
<table cellspacing="1" cellpadding="1" border="1" style="WIDTH: 100%" title="Title" xmlns="http://www.w3.org/1999/xhtml" >
<tbody>
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='w:row'">
<tr>
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='w:cell'">
<td>
<xsl:for-each select="child::*">
<xsl:choose>
<xsl:when test="name()='w:spanInfo'">
<xsl:variable name="var8" select="@backgroundColor" />
<xsl:variable name="var9" select="@columnWidth" />
<xsl:variable name="var10" select="@isRowHeader" />
<xsl:if test="$var8!='' or $var9!=''">
<xsl:attribute name="style">
<xsl:if test="$var8!='' and $var9!=''">
<xsl:value-of select="concat('BACKGROUND-COLOR: ',$var8,'; WIDTH: ',$var9,'%')" />
</xsl:if>
<xsl:if test="$var8!='' and not($var9)">
<xsl:value-of select="concat('BACKGROUND-COLOR: ',$var8)" />
</xsl:if>
<xsl:if test="not($var8) and $var9!=''">
<xsl:value-of select="concat('WIDTH: ',$var9,'%')" />
</xsl:if>
</xsl:when>
<xsl:when test="name()='text'">
<xsl:if test="../w:spanInfo/@isRowHeader='true'">
<strong><xsl:value-of select="." /></strong>
</xsl:if>
<xsl:if test="../w:spanInfo/@isRowHeader!='true' or not(../w:spanInfo/@isRowHeader) ">
<xsl:value-of select="." />
</xsl:if>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</td>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</tr>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</tbody>
</table>
</tablecontent>
</xsl:template>
ただし、上記のテンプレートは、w:spanInfoの「isRowHeader」属性のみが「true」であるセルに「strong」タグを追加します。ただし、1番目のセルにすでに「isRowHeader」属性が「true」である場合は、w:spanInfoの「isRowHeader」属性の値に関係なく、「strong」タグを2番目のセルのコンテンツに追加する必要があります。