我有以下字典条目的片段:
<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>
来解决?
答案 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,因此可以确定要应用的模板。