2017-07-25 92 views
0

裏面一個地文件的TEI頭我已經宣佈了一些字符: `TEI XSL:模板顯示標籤<g>相對CHARNAME

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

`

裏面亭的正文我有標籤: 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做到這一點:模板? 我試過,但不起作用:

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

文件亭的腦袋裏面我鏈接到樣式表:

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

裏面的主要風格,我有:

<?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它開始:

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

我也tryed這些代碼的並沒有爲我工作:

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

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

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

哪個XSLT版本,XSLT處理器您使用?考慮到使用'xml:id',我認爲你甚至不需要XSLT 2.0中的密鑰,但可以使用'id'。至於嘗試使用密鑰,請向我們展示您的密鑰定義以及在XML輸入和XSLT代碼中使用和聲明的任何名稱空間。 –

回答

0

我這個決心:

<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

假設XSLT 2.0應該足夠使用id功能:

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