我有以下字典条目片段:
<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>
请注意:这些模式具有不同的默认优先级,因此要应用的模板是完全确定的。