首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TEI :显示标记<g>相对charName的模板

TEI :显示标记<g>相对charName的模板
EN

Stack Overflow用户
提问于 2017-07-25 15:42:05
回答 2查看 47关注 0票数 0

在TEI文件的tei头中,我声明了一些字符:

代码语言:javascript
复制
<charDecl>
   <char xml:id="char1">
     <charName>Vnc.</charName>
     <desc>Tractus longus</desc>
    </char>

    <char xml:id="char2">
     <charName>Drag.</charName>
     <desc>Interclusio uncinata</desc>
    </char>
...
</charDecl>

`

在tei的正文文本中,我有标记:Lorem ipsum <g ref="#char2"/> dolor sit II. Cotylus habet <g ref="#char1">—</g>,我希望它会像这样显示:Lorem ipsum [Drag.] dolor sit II. Cotylus habet —[Vnc.]

如何使用xsl样式表xsl:template完成此操作?我试过了,但没有用:

代码语言:javascript
复制
 <xsl:key name="char" match="tei:teiHeader/encodingDesc/charDecl/char" use="@xml:id"/>

<xsl:template match="tei:g[@ref]">

    <xsl:apply-templates />
    <span title="<xsl:value-of select="key('char',substring-after(@ref,'#'))/desc"/>">[<xsl:value-of select="key('char',substring-after(@ref,'#'))/charName"/>]</span>
</xsl:template>

在文件的开头,我链接到样式表:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="file:teilite.rnc" type="compact"?>
<?xml-stylesheet type="text/xsl" href="../mainstyle.xsl"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">

在我的主要风格中:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:eg="http://www.tei-c.org/ns/Examples"
  xmlns:tei="http://www.tei-c.org/ns/1.0" 
  xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
  xmlns:exsl="http://exslt.org/common"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:fn="http://www.w3.org/2005/xpath-functions"
  extension-element-prefixes="exsl msxsl"
  xmlns="http://www.w3.org/1999/xhtml" 
  xmlns:html="http://www.w3.org/1999/xhtml" 
  exclude-result-prefixes="xsl tei xd eg fn #default">
...
<xsl:include href="rendchars.xsl"/>

在rendchars.xsl内部,它启动:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml"
    xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
    xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns:tei="http://www.tei-c.org/ns/1.0"
    xmlns:teix="http://www.tei-c.org/ns/Examples" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:teidocx="http://www.tei-c.org/ns/teidocx/1.0"
    exclude-result-prefixes="a fo html rng tei teix teidocx" version="2.0">

我也尝试过这些对我没用的密码:

代码语言:javascript
复制
<xsl:key name="chname" match="tei:teiHeader/encodingDesc/charDecl/char" use="@xml:id"/>
<xsl:template match="g[@ref]">
    <span title="{key('chname',substring-after(@ref,'#'))/tei:desc}">[<xsl:value-of select="key('chname',substring-after(@ref,'#'))/tei:charName"/>]</span><xsl:text></xsl:text>
 </xsl:template>

代码语言:javascript
复制
<xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="charDecl"/>
    <xsl:template match="g[@ref]">
      <xsl:value-of select="id(substring-after(@ref,'#'))/charName"/>
    </xsl:template>

代码语言:javascript
复制
<xsl:key name="chname" match="tei:teiHeader/tei:encodingDesc/tei:charDecl/tei:char" use="@xml:id"/>
     <xsl:template match="g[@ref]">
        <xsl:apply-templates/>
        <span title="{key('chname',substring-after(@ref,'#'))/tei:desc}">[<xsl:value-of select="key('chname',substring-after(@ref,'#'))/tei:charName"/>]</span><xsl:text></xsl:text>
     </xsl:template>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-26 08:13:44

我用这个解决了:

代码语言:javascript
复制
   <xsl:key name="chname" match="tei:teiHeader/tei:encodingDesc/tei:charDecl/tei:char" use="@xml:id" />
             <xsl:template match="tei:g[@ref]">
                <xsl:apply-templates/>
                <span title="{key('chname',substring-after(@ref,'#'))/tei:desc}" >[<xsl:value-of select="key('chname',substring-after(@ref,'#'))/tei:charName"/>]</span><xsl:text></xsl:text>
             </xsl:template>
票数 0
EN

Stack Overflow用户

发布于 2017-07-25 15:58:37

假设XSLT2.0足以使用id函数:

代码语言:javascript
复制
<xsl:template match="g[@ref]">
  <xsl:value-of select="id(substring(@ref, 2))/charName"/>
</xsl:template>

完整示例:http://xsltransform.net/a9Gix6

至于您的尝试,如果所有元素都位于同一个名称空间中,那么我认为您需要<span title="{key('char',substring-after(@ref,'#'))/tei:desc}">[<xsl:value-of select="key('char',substring-after(@ref,'#'))/tei:charName"/>]</span>,也就是说,您需要确保在所有路径中都使用TEI元素的前缀。并且需要将密钥更改为<xsl:key name="char" match="tei:teiHeader/tei:encodingDesc/tei:charDecl/tei:char" use="@xml:id"/>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45307968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档