XSL:将 link 添加到由多个 TEI-XML 元素组成的字符串中的子字符串
XSL: add a link to a substring within a string made of several TEI-XML elements
这几天,我尝试在字符串中的子字符串 w[@type='verb']
中添加一个 link。
我正在研究泥板的 TEI-XML
音译,因此 <l>
中包含的 <w>
的 elements
和 @type
并不总是以相同的顺序排列。
XSLT
版本 3.0:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:template match="/">
<xsl:apply-templates select="//div1"/>
</xsl:template>
<xsl:template match="//div1">
<!-- additional content before <ul> -->
<ul>
<li>
<xsl:for-each select="descendant-or-self::lg/l[@n]">
<xsl:variable name="verb1" select="w[@type='verb']"/>
<xsl:variable name="href1" select="w[@type='verb']/@lemmaRef"/>
<xsl:variable name="single-l" select="w[@type='coo'] | w[@type='noun'] | w[@type='verb'] | w[@type='num'] | w[@type='adv'] | w[@type='adj'] | g | name"/>
<xsl:value-of select="$single-l"/>
<sup><xsl:value-of select="./@n"/></sup>
</xsl:for-each>
</li>
</ul>
</xsl:template>
我需要为每个 w[@type='verb']
添加一个 link lemmaRef
。
TEI
的示例 — 我从 element
中删除了 @xml:id
,而不是此示例中的 l
:
<lg>
<l n="4b-5a" xml:id="ktu1-3_ii_l4b-5a">
<w type="coo">w</w><space/>
<w type="verb" lemmaRef="uga/verb.xsl#qry"><damage degree="medium" facs="definir"><supplied resp="KTU">t</supplied></damage>qry</w>
<g>.</g>
<w type="noun" lemmaRef="uga/noun.xsl#ġlm">ġlmm</w>
<lb/><w>b</w><space/>
<w type="noun" lemmaRef="uga/noun.xsl#št">št</w>
<g>.</g>
<w type="noun" lemmaRef="uga/noun.xsl#ġr">ġr</w>
<g>.</g>
</l>
</lg>
我需要显示:
<ul>
<li>w <a href="uga/verb.xml#qry">tqry</a> . ġlmm št . ġr .<sup>4b-5a</sup></li>
</ul>
"tqry" 是包含在 <l>
.
中的动词
我怎样才能在 XSLT
中显示 <a href="{$href1}"><xsl:value-of select="$verb1"/>
。我试过 replace
的 $single-l
或定义以前 XSLT
代码的新变量,但它不起作用。我也尝试过 key
但我认为我仍然有理解问题...
提前感谢您的宝贵意见。
我认为您不应该尝试构建一个字符串然后在其中插入标记,似乎应该可以简单地处理子元素然后匹配 lg/l[@n]/w[@type = 'verb']
将其转换为HTML 超链接:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<head>
<title>Example</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="div">
<section>
<ul>
<xsl:apply-templates select=".//lg/l[@n]"/>
</ul>
</section>
</xsl:template>
<xsl:template match="lg/l[@n]">
<li>
<xsl:apply-templates/>
<sup>
<xsl:value-of select="@n"/>
</sup>
</li>
</xsl:template>
<xsl:template match="lg/l[@n]/w[@type = 'verb']">
<a href="{@lemmaRef}">
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="space">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
目前这并不能完全产生想要的结果,但是
<li>w <a href="uga/verb.xsl#qry">tqry</a>.ġlmmb št.ġr.<sup>4b-5a</sup></li>
相反,如果某个元素中有您不需要或不想要的内容,您可以为其添加一个空模板,这样它就不会产生任何输出(例如 <xsl:template match="lg/l[@n]/w[not(@type)]"/>
)。
不知道是不是也有重要的白色space漏掉了,插入的规则是什么,可能需要你解释一下。
这几天,我尝试在字符串中的子字符串 w[@type='verb']
中添加一个 link。
我正在研究泥板的 TEI-XML
音译,因此 <l>
中包含的 <w>
的 elements
和 @type
并不总是以相同的顺序排列。
XSLT
版本 3.0:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:template match="/">
<xsl:apply-templates select="//div1"/>
</xsl:template>
<xsl:template match="//div1">
<!-- additional content before <ul> -->
<ul>
<li>
<xsl:for-each select="descendant-or-self::lg/l[@n]">
<xsl:variable name="verb1" select="w[@type='verb']"/>
<xsl:variable name="href1" select="w[@type='verb']/@lemmaRef"/>
<xsl:variable name="single-l" select="w[@type='coo'] | w[@type='noun'] | w[@type='verb'] | w[@type='num'] | w[@type='adv'] | w[@type='adj'] | g | name"/>
<xsl:value-of select="$single-l"/>
<sup><xsl:value-of select="./@n"/></sup>
</xsl:for-each>
</li>
</ul>
</xsl:template>
我需要为每个 w[@type='verb']
添加一个 link lemmaRef
。
TEI
的示例 — 我从 element
中删除了 @xml:id
,而不是此示例中的 l
:
<lg>
<l n="4b-5a" xml:id="ktu1-3_ii_l4b-5a">
<w type="coo">w</w><space/>
<w type="verb" lemmaRef="uga/verb.xsl#qry"><damage degree="medium" facs="definir"><supplied resp="KTU">t</supplied></damage>qry</w>
<g>.</g>
<w type="noun" lemmaRef="uga/noun.xsl#ġlm">ġlmm</w>
<lb/><w>b</w><space/>
<w type="noun" lemmaRef="uga/noun.xsl#št">št</w>
<g>.</g>
<w type="noun" lemmaRef="uga/noun.xsl#ġr">ġr</w>
<g>.</g>
</l>
</lg>
我需要显示:
<ul>
<li>w <a href="uga/verb.xml#qry">tqry</a> . ġlmm št . ġr .<sup>4b-5a</sup></li>
</ul>
"tqry" 是包含在 <l>
.
我怎样才能在 XSLT
中显示 <a href="{$href1}"><xsl:value-of select="$verb1"/>
。我试过 replace
的 $single-l
或定义以前 XSLT
代码的新变量,但它不起作用。我也尝试过 key
但我认为我仍然有理解问题...
提前感谢您的宝贵意见。
我认为您不应该尝试构建一个字符串然后在其中插入标记,似乎应该可以简单地处理子元素然后匹配 lg/l[@n]/w[@type = 'verb']
将其转换为HTML 超链接:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output method="html" indent="yes" html-version="5"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<html>
<head>
<title>Example</title>
</head>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="div">
<section>
<ul>
<xsl:apply-templates select=".//lg/l[@n]"/>
</ul>
</section>
</xsl:template>
<xsl:template match="lg/l[@n]">
<li>
<xsl:apply-templates/>
<sup>
<xsl:value-of select="@n"/>
</sup>
</li>
</xsl:template>
<xsl:template match="lg/l[@n]/w[@type = 'verb']">
<a href="{@lemmaRef}">
<xsl:apply-templates/>
</a>
</xsl:template>
<xsl:template match="space">
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
目前这并不能完全产生想要的结果,但是
<li>w <a href="uga/verb.xsl#qry">tqry</a>.ġlmmb št.ġr.<sup>4b-5a</sup></li>
相反,如果某个元素中有您不需要或不想要的内容,您可以为其添加一个空模板,这样它就不会产生任何输出(例如 <xsl:template match="lg/l[@n]/w[not(@type)]"/>
)。
不知道是不是也有重要的白色space漏掉了,插入的规则是什么,可能需要你解释一下。