XSLT скрипка здесь: https://xsltfiddle.liberty -development.net / bdxtqU / 5
Этот вопрос вытекает из последствий этого ответа , где я хотелвывод с использованием XSLT 2.0, <persName>
в HTML-URL, где <persName>
можно найти внутри другого <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>
Я бы хотел разделить <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']]
, но я не добился успеха.
Заранее спасибо.