在下面的代碼我有xml輸入顯示booktypes.I要根據每列中的類型排列圖書類型。有些列的值有些不是。檢查預期的輸出。如何使用xslt插入html單元格值?
輸入
<?xml version="1.0" encoding="UTF-8"?>
<BookTypes>
<Types>
<string>T1</string>
<string>T3,M1,P1</string>
<string>T2,P2</string>
<string>M3,P3</string>
</Types>
</BookTypes>
XSLT腳本:當前XSLT腳本給我的結果,但並不如預期。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:variable name="types">
<type>T</type>
<type>M</type>
<type>P</type>
</xsl:variable>
<xsl:variable name="types-set" select="exsl:node-set($types)" />
<xsl:template match="/">
<table>
<tr>
<th>T Type</th>
<th>M Type</th>
<th>P Type</th>
</tr>
<xsl:for-each select="BookTypes/Types/string">
<tr>
<xsl:variable name="splitValue">
<xsl:apply-templates/>
</xsl:variable>
<xsl:for-each select="exsl:node-set($splitValue)/*">
<xsl:variable name="mySplittedValue" select="." />
<xsl:for-each select="$types-set/type">
<xsl:variable name="my-types" select="." />
<td>
<xsl:choose>
<xsl:when test="contains($mySplittedValue, $my-types)">
<xsl:value-of select="$mySplittedValue"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>-</xsl:text>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:for-each>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="text()" name="split">
<xsl:param name="pText" select="."/>
<xsl:if test="string-length($pText) > 0">
<item>
<xsl:value-of select="substring-before(concat($pText, ','), ',')"/>
</item>
<xsl:call-template name="split">
<xsl:with-param name="pText" select="substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
預期輸出
<table>
<tr>
<th>T Type</th>
<th>M Type</th>
<th>P Type</th>
</tr>
<tr>
<td>T1</td>
<td>-</td>
<td>-</td>
</tr>
<tr>
<td>T3</td>
<td>M1</td>
<td>P1</td>
</tr>
<tr>
<td>T2</td>
<td>-</td>
<td>P2</td>
</tr>
<tr>
<td>-</td>
<td>M3</td>
<td>P3</td>
</tr>
</table>
綜述:輸出 有三(3)固定的類型,P,M,T它們是存在於任何一個輸入說P3,M3。這裏P3包含P(type),所以P3的值應該在列名P型下。在輸入中有3或2或1的值由逗號分隔(如T3,M1,P1)。每個值都應該先拆分,然後再顯示在表中
哪些具體XSLT 1.0處理器,您使用的? – 2014-11-24 07:33:25
關於您編輯的(第二)輸出。一個例子不足以解釋變革背後的邏輯。請提供確切的規則 - 例如:字符串的第一個字符,或...? – 2014-11-24 07:53:59
有三種固定類型,P,M,T存在於任何一個輸入中,比如P3,M3。這裏P3包含P(type),所以P3的值應該在列名P型下。在輸入中有3或2或1的逗號分隔的值(如 T3,M1,P1 )。每個值應該先拆分,然後根據其類型在表中顯示。 –
ADP
2014-11-24 09:32:02