xsl <choose>:如何选择某个孩子的后继兄弟?

时间:2019-03-20 07:41:20

标签: xpath xslt-1.0

我有以下字典条目的片段:

<entry>
      <form>
        <orth></orth>
        <orth></orth>       
      </form>
      <form>
        <note></note>
        <orth></orth>
      </form>
</entry>

使用xsl <choose>时,我仅在以下<form>具有<form>作为孩子的情况下才选择<note>。我尝试过

<xsl:template match="tei:form">
  <xsl:choose>

    <xsl:when test="following-sibling::*[1][name()='form' and child='note']">
      <xsl:apply-templates/><text>\ </text>
    </xsl:when>

  </xsl:choose>
</xsl:template>

但这不起作用。我应该如何正确地将<form>作为孩子的<note>来解决?

2 个答案:

答案 0 :(得分:0)

您的问题令人困惑。 xsl:choose不选择任何内容。

如果要在xsl:choose-IOW的上下文中使用form,则要处理所有 form个元素并选择应执行的代码根据紧随其后的同级note的存在-尝试类似的操作:

<xsl:template match="form">
    <xsl:choose>
        <xsl:when test="following-sibling::form[1]/note">
            <!-- DO SOMETHING -->
        </xsl:when>
        <xsl:otherwise>
            <!-- DO SOMETHING ELSE -->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

为了仅处理 满足条件的表单元素,请尝试:

<xsl:template match="entry">
    <!-- ... -->
    <xsl:for-each select="form[following-sibling::form[1]/note]">
        <!-- DO SOMETHING -->
    </xsl:for-each>
    <!-- ... -->
</xsl:template>

答案 1 :(得分:0)

如果您要将模板应用于所有form元素,则可以避免使用条件指令,而只需使用以下模式:

<xsl:template match="form">
    <!-- General case -->
</xsl:template>

<xsl:template match="form[following-sibling::form[1]/note]">
    <!-- Particular case -->
</xsl:template>

请注意:这些模式具有不同的default priority,因此可以确定要应用的模板。