XSLT:将HTML脚注合并到一个位于正确位置的TEI note元素中

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>

我正在将HTML转换为TEI,并遇到了处理脚注的问题

输入HTML如下所示:

 <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>

这些答案中有一个解决了你的问题吗?如果是,请将其标记为已接受,以便此问题可以被视为已解决。非常感谢。这就是我一直在寻找的解决方案: