XSLT 2.0分隔两个递归输出

时间:2018-10-21 13:20:36

标签: xslt xslt-2.0 tei

XSLT在这里摆弄:https://xsltfiddle.liberty-development.net/bdxtqU/5

这个问题来自this answer的含义,我想使用XSLT 2.0将<persName>输出到HTML URL,其中<persName>可以在另一个{{1 }},因此所有内容都变成了网址。

<persName>

输出到:

<persName nymRef="#Raimunda_Faure">Raimunda uxor 
   <persName nymRef="#Bernard_Faure_Senior">Bernardi Fabri 
                   senior</persName></persName>

使用下面的代码。而且我还将它用于另一个输出到URL <a href="www.foo.com/person/Raimunda_Faure">Raimunda uxor</a><a href="www.foo.com/person/Bernard_Faure_Senior">Bernardi Fabri<a> 的“命名实体”。

问题在于<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> <placeName>分开,以便它们仅创建嵌套的URL,其中将相同的命名实体类型嵌套在命名实体中。

从原理上讲,这些将递归输出所有<persName><placeName>

<persName>

但是这些只会将父实体输出为URL,无论是 <persName>text <persName>text</persname> <persName>text</persname> </persName> <placeName>text <placeName>text</placename> <placeName>text</placename> </placeName> 还是<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" />之外,但我没有成功。

谢谢。

1 个答案:

答案 0 :(得分:1)

添加模板

<xsl:template match="tei:persName/tei:placeName | tei:placeName/tei:persName">
    <xsl:apply-templates/>
</xsl:template>

https://xsltfiddle.liberty-development.net/bdxtqU/7