我正在尝试做的事情非常简单,但我似乎无法让它发挥作用。
我有以下xml:
<analysis>
<field>
<name>field_1</name>
<type>number</type>
<tag>Number Field Number One</tag>
</field>
<field>
<name>field_2</name>
<type>text</type>
<tag>Text Field Number One</tag>
</field>
<field>
<name>field_3</name>
<cell>A12</cell>
<type>Excel</type>
<tag>Value that comes from an Excel file</tag>
</field>
</analysis>
我希望XML输出:
<table>
<thead>
<tr>
<th>Nombre</th> // Name in spanish
<th>Tipo</th> // Type in spanish
</tr>
</thead>
<tbody>
<tr>
<td>Number Field Number One</td>
<td>Número</td> // Number in spanish
</tr>
<tr>
<td>Text Field Number One</td>
<td>Campo de Texto</td> // Text field in spanish
</tr>
<tr>
<td>Value that comes from an Excel file</td>
<td>Excel (A12)</td> // Excel (cell)
</tr>
</tbody>
</table>
到目前为止我的转型是下一个:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="analysis">
<table>
<thead>
<tr>
<th>Nombre</th>
<th>Tipo</th>
</tr>
</thead>
<tbody>
<xsl:apply-templates select="field[type != 'table']"/>
<!-- I have another type called table which I'm ignoring for this question and won't follow the same scheme -->
</tbody>
</table>
<br />
</xsl:template>
<xsl:template match="campo[field != 'table']">
<tr>
<td>
<xsl:value-of select="tag" />
</td>
<td>
<xsl:apply-templates select="type"/>
</td>
</tr>
</xsl:template>
<!-- The following templates don't match -->
<xsl:template select="type = 'Excel'">
<xsl:param name="cell" select="preceding-sibling::node()/cell" />
<xsl:value-of select="concat('Excel ', $cell)" />
</xsl:template>
<xsl:template select="type = 'number'">
<xsl:value-of select="'Número'" />
</xsl:template>
<xsl:template select="type = 'text'">
<xsl:value-of select="'Campo de Texto'" />
</xsl:template>
</xsl:stylesheet>
正如代码所说,最后的模板不匹配。如果标签的文本等于某个标签,我如何匹配标签?我的输出是我想要的,但使用'数字','文本'和'Excel'值而不是西班牙语中的等价物,这就是我想要的。
我尝试了<xsl:template select="field[type = 'Excel']">
之类的其他内容,但效果相同。
答案 0 :(得分:1)
&#34;如果标签的文字等于某个标签,我如何匹配标签?&#34;
关注在元素的文本等于特定值时匹配元素的具体问题,您可以使用引用当前上下文元素的.
来实现该元素。匹配&#39;任务,例如:
<xsl:template match="type[.='text']">
<xsl:value-of select="'Campo de Texto'" />
</xsl:template>