【问题标题】:Using <xsl:choose> to format an element depending on its ancestor element使用 <xsl:choose> 根据其祖先元素格式化元素
【发布时间】:2012-03-09 07:18:54
【问题描述】:

我是新手,我正在尝试在 元素中使用 test 来查看当前节点是否是早期节点的后代。然后我想将适当的 html 标记应用于内容。我是 xpath 表达式的新手。

具体来说,我想将

标记应用于 元素,这些元素是 元素的后代。我想将 标记应用于作为 元素的后代的 元素。我最好的猜测是我必须在我的

标签: xml xslt xpath


【解决方案1】:
<xsl:template match="thead//tcell">
    <th>
        <xsl:value-of select="."/>
    </th>
</xsl:template>

<xsl:template match="tbody//tcell">
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

或者如果你仍然想使用xsl:choose:

<xsl:template match="tcell">
    <xsl:choose>
        <xsl:when test="ancestor::thead">
            <th>
                <xsl:value-of select="."/>
            </th>
        </xsl:when>
        <xsl:otherwise>
            <td>
                <xsl:value-of select="."/>
            </td>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

【讨论】:

  • 我确信这会起作用,但我得到了一个 xsl 样式表模板,其中所有元素都特别匹配。有没有办法在不添加另一个
  • @M_66:记住这条规则:在 XSLT 中总是更喜欢使用模板匹配而不是使用显式条件。让 XSLT 处理器为您完成工作,从而获得更短、更简单、易于理解、更灵活且不易出错的代码。
  • 谢谢迪米特。我对 XSLT 的经验有限,但您的建议确实有道理。如果可以选择,我会更喜欢这种方法,但事实并非如此,所以我不得不使用显式条件。看起来确实会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多