XSLT 2.0,样式表和数据位于https://xsltfiddle.liberty-development.net/bFDb2D3/4
我正在将以tei-xml编码的中世纪文档转换为网页,用户可以在其中切换文档的两种不同视图,以及查看翻译和各种脚注(eg)。这需要多层处理才能输出:
我正在使用modes
来处理处理级别,每种模式都可以正常工作,但是它们在一起都缺少输出。
输出内容:
<div class="inter"><p>
和所有转换模式inter
+ fn-add-marker
[其中应包含<a href>
,文本中的上标字母和数字]
<div class="diplo"><p>
和所有转换模式diplo
+ fn-add-marker
[应包含[文本],行号,上标字母和文本中的数字]
<div><p>
及其翻译
<div>
和关键设备
<div>
(带脚注)
XSLTfiddle输出为:
fn-add-marker
)<persName>
或<placeName>
中的地方(即<xsl:template match="tei:lb">
<xsl:template match="tei:supplied">
)和缺少上标数字< / strong>(模式fn-add-marker
)关于#2,缺少的行#和[文本]似乎是由于处理<persName>
和<placeName>
的模板没有移交给其他模板引起的? (第173-218行的模板)
关于模式fn-add-marker
的所有模板都在第41-77行。
非常感谢。
答案 0 :(得分:2)
基本上,在XSLT 2中,一旦您使用命名模式,就需要确保模板属于某个模式,例如mode="foo"
,例如您使用在任何mode="foo"
内部使用mode="#current"
或更通用的xsl:apply-templates
,以确保处理以该模式继续进行。有关详细信息,请参见https://www.w3.org/TR/xslt20/#element-apply-templates。
在https://xsltfiddle.liberty-development.net/gWmuiK7,我尝试使用XSLT修复您的样式表,然后在https://xsltfiddle.liberty-development.net/bFDb2D3/5,您可以看到应用固定样式表的结果。不确定编程方法是否是正确的工具,但可能有助于在mode
上展示建议的使用模式xsl:apply-templates
。
然后我认为您需要确保以两种新模式处理添加的标记:
<!-- adds fn numbers -->
<xsl:template match="tei:date[@type='deposition_date']" mode="inter dilpo">
<xsl:apply-templates mode="#current"/>
<xsl:apply-templates select="." mode="number"/>
</xsl:template>
<xsl:template match="tei:note[@type='public'] | tei:fn-marker" mode="inter diplo">
<xsl:apply-templates select="." mode="number"/>
</xsl:template>
<xsl:template match="tei:date[@type='deposition_date'] | tei:note[@type='public'] | tei:fn-marker" mode="number">
<sup>
<xsl:number count="tei:date[@type='deposition_date'] | tei:note[@type='public'] | tei:fn-marker" format="1" level="any"/>
</sup>
</xsl:template>
<!-- end of footnote transformations -->
https://xsltfiddle.liberty-development.net/bFDb2D3/6第51至66行。