XSLT:将HTML脚注合并到一个位于正确位置的TEI note元素中
我正在将HTML转换为TEI,并遇到了处理脚注的问题 输入HTML如下所示:XSLT:将HTML脚注合并到一个位于正确位置的TEI note元素中,html,xml,xslt,merge,tei,Html,Xml,Xslt,Merge,Tei,我正在将HTML转换为TEI,并遇到了处理脚注的问题 输入HTML如下所示: <content> <div> <p>p1</p> <p>p2</p> <p>p3<a href="#_ftn1" name="_ftnref1" title="">[1]</a> p3</p>
<content>
<div>
<p>p1</p>
<p>p2</p>
<p>p3<a href="#_ftn1" name="_ftnref1" title="">[1]</a> p3</p>
<p>p4</p>
<p>p5<a href="#_ftn2" name="_ftnref2" title="">[2]</a> p5</p>
<p>p6</p>
<p><a href="#_ftnref1" name="_ftn1" title="">[1]</a> footnote1</p>
<p><a href="#_ftnref2" name="_ftn2" title="">[2]</a> footnote2</p>
</div>
</content>
所需输出为:
<content>
<div>
<p>p1</p>
<p>p2</p>
<p>p3<note>footnote1</note> p3</p>
<p>p4</p>
<p>p5<note>footnote2</note> p5</p>
<p>p6</p>
</div>
</content>
不幸的是,我不知道如何处理这件事。所有其他元素都可以简单地交换,例如:
<xsl:template match="xhtml:br">
<lb/>
</xsl:template>
非常感谢你的帮助 尝试此模板以获得结果:
<xsl:template match="a[contains(@href,'ftn')]">
<note><xsl:value-of select="substring(text(),2,1)"/></note>
</xsl:template>
以下转换将提供所需的输出 请注意,它对内容的结构进行了一些假设。特别是,你怎么知道p是脚注?它在结构上与其他段落相同。下面的代码使用标识符命名方案,该方案在整个实际输入过程中可能一致,也可能不一致 复制脚注内容时,如果省略脚注回指本身,同样适用。下面的代码使用一种简单的方法来复制锚的兄弟文本,这对于您的实际数据来说可能过于简单
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
exclude-result-prefixes="xhtml">
<xsl:key name="fn" match="xhtml:a" use="@name" />
<!-- Copy template with namespace stripped -->
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="node()|@*" />
</xsl:element>
</xsl:template>
<!-- Omit footnote content instead of reference -->
<xsl:template match="xhtml:a[key('fn', substring-after(@href, '#'))]">
<note>
<xsl:copy-of select="key('fn', substring-after(@href, '#'))/../text()"/>
</note>
</xsl:template>
<!-- Hack to omit the footnotes themselves -->
<xsl:template match="xhtml:*[xhtml:a[contains(@href, '_ftnref')]]" />
</xsl:stylesheet>
这些答案中有一个解决了你的问题吗?如果是,请将其标记为已接受,以便此问题可以被视为已解决。非常感谢。这就是我一直在寻找的解决方案: