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" />
之外,但我没有成功。
谢谢。
答案 0 :(得分:1)
添加模板
<xsl:template match="tei:persName/tei:placeName | tei:placeName/tei:persName">
<xsl:apply-templates/>
</xsl:template>