xsl <choose>: 如何选择与某个孩子的以下兄弟姐妹?



我有以下字典条目片段:

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

对于 xsl<choose>,我想仅在以下<form>在孩子时<note>时才选择<form>。我试过了

<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>一起作为孩子?

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

如果要在form- IOW 的上下文中使用xsl:choose,则需要处理所有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>

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

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

请注意:这些模式具有不同的默认优先级,因此要应用的模板是完全确定的。

相关内容

  • 没有找到相关文章