这是我的xml:
(t (will-throw-at-compile))
我想将它转换成usign xslt,最终的结果应该是:
<volume>
<cap>title 1</cap>
<cap>title 2</cap>
<cap>title 3</cap>
<cap>title 4</cap>
<cap>title 5</cap>
<desc>desc 1</desc>
<desc>desc 2</desc>
<desc>desc 3</desc>
<desc>desc 4</desc>
<desc>desc 5</desc>
</volume>
我试过这个xslt代码:
<table>
<tr>
<td>title 1</td>
<td>desc 1</td>
</tr>
<tr>
<td>title 2</td>
<td>desc 2</td>
</tr>
<tr>
...
</tr>
但它不起作用。当我在第n个上限时,获取第n desc的正确方法是什么?
答案 0 :(得分:1)
感谢您对问题的更新。
<xsl:value-of select="../desc[position()]"/>
您的想法是正确的,除了position()
此处取desc
的位置,即1,2,3等,具体取决于desc
的位置(焦点在每个谓词测试)。像这样的测试总是正确的,因为如果谓词包含数值$X
,它就是$X = position()
的缩写。在这种情况下,您实际上是在写../desc[position() = position()]
,这总是正确的。
你想要的是cap
的当前位置。要解决此问题,请使用变量,如下所示。
以下是我将如何使用XSLT的功能与模板匹配:
<xsl:output indent="yes" method="html" />
<xsl:attribute-set name="td1">
<xsl:attribute name="style">border-top: dotted 1px; border-right:solid 1px; text-align:right; width:46%;</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="td2">
<xsl:attribute name="style">border-top: dotted 1px; text-align:right; :46%;</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="/volume">
<table style="border:solid 1px; width:500px; margin:auto;">
<xsl:apply-templates select="cap" />
</table>
</xsl:template>
<xsl:template match="cap">
<tr>
<xsl:variable name="pos" select="position()" />
<td xsl:use-attribute-sets="td1">
<xsl:value-of select="." />
<br />
</td>
<xsl:apply-templates select="../desc[$pos]" />
</tr>
</xsl:template>
<xsl:template match="desc">
<td xsl:use-attribute-sets="td2">
<xsl:value-of select="." />
<br />
</td>
</xsl:template>
编辑:在您更新问题后,我添加了与style属性的交易,并附加了<tr>
元素。现在结果是,给出您的输入:
<table style="border:solid 1px; width:500px; margin:auto;">
<tr>
<td style="border-top: dotted 1px; border-right:solid 1px; text-align:right; width:46%;">title 1<br></td>
<td style="border-top: dotted 1px; text-align:right; :46%;">desc 1<br></td>
</tr>
<tr>
<td style="border-top: dotted 1px; border-right:solid 1px; text-align:right; width:46%;">title 2<br></td>
<td style="border-top: dotted 1px; text-align:right; :46%;">desc 2<br></td>
</tr>
<tr>
<td style="border-top: dotted 1px; border-right:solid 1px; text-align:right; width:46%;">title 3<br></td>
<td style="border-top: dotted 1px; text-align:right; :46%;">desc 3<br></td>
</tr>
<tr>
<td style="border-top: dotted 1px; border-right:solid 1px; text-align:right; width:46%;">title 4<br></td>
<td style="border-top: dotted 1px; text-align:right; :46%;">desc 4<br></td>
</tr>
<tr>
<td style="border-top: dotted 1px; border-right:solid 1px; text-align:right; width:46%;">title 5<br></td>
<td style="border-top: dotted 1px; text-align:right; :46%;">desc 5<br></td>
</tr>
</table>