XSLT 小提琴在这里:https ://xsltfiddle.liberty-development.net/bdxtqU/5
这个问题源于这个答案的含义,我想使用 XSLT 2.0 将其输出<persName>
到 HTML URL 中,<persName>
可以在其中找到 another <persName>
,因此所有内容都转换为 URL。
<persName nymRef="#Raimunda_Faure">Raimunda uxor
<persName nymRef="#Bernard_Faure_Senior">Bernardi Fabri
senior</persName></persName>
输出到:
<a href="www.foo.com/person/Raimunda_Faure">Raimunda
uxor</a><a href="www.foo.com/person/Bernard_Faure_Senior">Bernardi
Fabri<a>
使用下面找到的代码。我还将它用于另一个“命名实体”,该实体将输出到 URL <placeName>
,.
问题是它<persName>
可以像这样出现在里面<placeName>
(反之亦然):
<placeName type="event_loc" nymRef="#home_of_Guilhem_Vidal">in domo
<persName nymRef="#Guilhem_Vidal_MSP-AU" role="own">Willelmi Vitalis</persName></placeName>
我想要的是 and 的分离<placeName>
,<persName>
这样它们只创建嵌套的 URL,其中相同的命名实体类型嵌套在命名实体中。
从原理上讲,这些将递归地输出所有<placeName>
和<persName>
:
<persName>text
<persName>text</persname>
<persName>text</persname>
</persName>
<placeName>text
<placeName>text</placename>
<placeName>text</placename>
</placeName>
但这些只会将父实体输出为 URL,无论是<placeName>
还是<persName>
,并绕过其中包含的命名实体:
<persName nymRef="#Raimunda_Faure">Raimunda
<placeName nymRef="#Toulouse">Toulouse</placename>
<placeName nymRef="Paris">Paris</placename>
</persName>
输出到<a href="www.foo.com/person/Raimunda_Faure">Raimunda Toulouse Paris</a>
<placeName nymRef="#Toulouse">Toulouse
<persName nymRef="#Raimunda_Faure">Raimunda</persname>
<persName nymRef="#Bernard_Faure">Bernard</persname>
</placeName>
输出到<a href="www.foo.com/place/Toulosue">Toulouse Raimunda Bernard</a>
这是两个现有的模板:
<xsl:template match="tei:text//tei:persName">
<xsl:variable name="nested" select="tei:persName[1]|
tei:persName[1]/following-sibling::node()" />
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="concat($paramPersonurl,substring-after(@nymRef,'#'))"/></xsl:attribute>
<xsl:apply-templates select="node() except $nested" />
</xsl:element>
<xsl:apply-templates select="$nested" />
</xsl:template>
<xsl:template match="tei:text//tei:placeName">
<xsl:variable name="nested" select="tei:placeName[1]|
tei:placeName[1]/following-sibling::node()" />
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="concat($paramPersonurl,substring-after(@nymRef,'#'))"/></xsl:attribute>
<xsl:apply-templates select="node() except $nested" />
</xsl:element>
<xsl:apply-templates select="$nested" />
</xsl:template>
看来我应该将另一个命名实体排除在其中一个<xsl:apply-templates select="node() except $nested" />
或<xsl:apply-templates select="$nested" />
使用类似的东西,[node()[name() != 'persName']]
但我没有成功。
提前致谢。