xslt 创建的 html 页面中未显示的诗歌文本部分

Portion of poetry text not shown in html page created by xslt

我正在做一个文本的数字化,但是文本中间的部分诗歌没有显示,你能帮我吗?

XSL 代码:http://pastebin.com/TkgZLurQ XML代码:http://pastebin.com/fyA4Ka1f

XML 文件中未转换的部分是:

<div type="poetry">
    <epigraph>
        <lg rhyme="ababcb">
            <l><name type="person">Beatrice</name> tutta ne l’etterne <rhyme label="a">rote</rhyme></l>
            <l>fissa con li occhi stava; e io in <rhyme label="b">lei</rhyme></l>
            <l>le luci fissi, di là sù <rhyme label="a">rimote</rhyme>.</l>
            <l>Nel suo aspetto tal dentro mi <rhyme label="b">fei</rhyme>,</l>
            <l>qual si fé <name type="person">Glauco</name> nel gustar de l’<rhyme label="c">erba</rhyme></l>
            <l>che ’l fé consorto in mar de li altri <rhyme label="b">dèi</rhyme>.</l>
        </lg>
    </epigraph>
</div>

您有一个模板 <xsl:template match="tei:body/tei:div[@type='racconto']/tei:div[@type='poetry']"> 和一个模板 <xsl:template match="tei:body/tei:div[@type='racconto']">,但后者不使用 apply-templates,因此永远不会应用前一个模板。你的整个方法是错误的,不要在匹配模板中使用 for-each 来处理一些子元素,而是使用 apply-templates 并为子元素编写模板。

并且您可以通过使用 <div>..</div> 之类的文字结果元素而不是 <xsl:element name="div">...</xsl:element>.

来节省一些输入

所以不用

<xsl:template match="tei:body/tei:div[@type='poetry']">
    <xsl:element name="div">
        <xsl:attribute name="class">poetry</xsl:attribute>
        <xsl:for-each select="tei:epigraph/tei:lg/tei:l">
            <xsl:element name="p">
                <xsl:attribute name="class">poetry</xsl:attribute>
                <xsl:element name="i">
                    <xsl:value-of select="."/>
                </xsl:element>
            </xsl:element>
        </xsl:for-each>
    </xsl:element>
</xsl:template>

使用

<xsl:template match="tei:body/tei:div[@type='poetry']">
    <div class="poetry">
        <!-- depending on your needs <xsl:apply-templates/> suffices, or use -->
        <xsl:apply-templates select="tei:epigraph/tei:lg/tei:l"/>
    </div>
</xsl:template>
<xsl:template match="tei:epigraph/tei:lg/tei:l">
  <p class="poetry">
    <i>
     <xsl:apply-templates/>
    </i>
  </p>
</xsl:template>

对于 <xsl:template match="tei:body/tei:div[@type='racconto']"> 你需要确保你把 <xsl:apply-templates/> 放在那里以确保子节点被处理,因为你有各种各样的东西在那里我无法告诉你想要的确切位置它,但一般方法如上例所示,将输入的一个元素映射到你想要的 HTML,然后使用应用模板处理它的子元素,确保你为那些需要输出的元素编写模板。