用XSLT創建列表,我有以下XML文件:從兩個XML文檔
<root>
<sub type="print">print</sub>
<sub type="email">email</sub>
</root>
我想匹配每個對下面的列表中鍵入了:
<types>
<type>email</type>
<type>broadcast</type>
<type>mobile</type>
<type>print</type>
<type>web</type>
</types>
使用此XSLT與「 doc「是xml和」types「上面列表中傳入的參數:
<xsl:stylesheet
xmlns = "http://www.w3.org/1999/xhtml"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xhtml" indent="yes" />
<xsl:param name="doc"/>
<xsl:param name="types"/>
<xsl:template match="/">
<xsl:for-each select="$doc//sub">
<xsl:variable name="count">
<xsl:number value="position()" format="1"/>
</xsl:variable>
<ul>
<xsl:for-each select="$types//type">
<xsl:choose>
<xsl:when test="$doc//sub[$count]/@type = text()">
<li>
<b>
<xsl:value-of select="$doc//sub[$count]/@type"/> - <xsl:value-of select="text()"/>
</b>
</li>
</xsl:when>
<xsl:otherwise>
<li>
<xsl:value-of select="$doc//sub[$count]/@type"/> - <xsl:value-of select="text()"/>
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</ul>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
這應該給我一個無序列表f或者我的xml中的每個sub都從sub打印,然後打印每個類型的類型。當子和類型匹配時,它應該是粗體。我想這一點:
<ul>
<li>print - email</li>
<li>print - broadcast</li>
<li>print - mobile</li>
<li><b>print - print</b></li>
<li>print - web</li>
</ul>
<ul>
<li><b>email - email</b></li>
<li>email - broadcast</li>
<li>email - mobile</li>
<li>email - print</li>
<li>email - web</li>
</ul>
但我得到這個:
<ul>
<li><b>print email - email</b></li>
<li>print email - broadcast</li>
<li>print email - mobile</li>
<li><b>print email - print</b></li>
<li>print email - web</li>
</ul>
<ul>
<li><b>print email - email</b></li>
<li>print email - broadcast</li>
<li>print email - mobile</li>
<li><b>print email - print</b></li>
<li>print email - web</li>
</ul>
感謝任何及所有的幫助。
謝謝!將類型從「sub」設置爲變量,然後使用「。」將類型與「類型」區分開來。是一個勝利者。像魅力一樣工作! – SpockJenkins 2012-03-12 17:50:22
@ user972029 - 非常歡迎您! +1是一個很好的問題。 – 2012-03-12 18:10:20