XSL: отображать значение, если оно одинаково в двух разных узлах

Я новичок в XSLT. Мой контент взят из файла TEI.

<!-- language: XSLT -->
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE stylesheet [
 <!ENTITY menu SYSTEM "corpus.xml"> 


]> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/1999/xhtml"
xpath-default-namespace="http://www.tei-c.org/ns/1.0" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="html" encoding="utf-8" doctype-system="about:legacy-compat"/>
<!-- delete extra blank lines -->
<xsl:strip-space elements="*"/>

<xsl:template match="/">
 <html>
  <head/>
  <body>
   <ul>
    <xsl:apply-templates select="descendant::taxonomy[2]/category[4]"/>
   </ul>
  </body>
 </html>
</xsl:template>

<xsl:template match="taxonomy[2]/category[4]">
<!-- several other 'xsl:for-each' within <ul> before the following <ul> --> 
<!-- each verb related to a sub-category ('category/category') in TEI -->
<ul>
 <xsl:for-each select="following-sibling::category/equiv[@n]">
  <li>
  <!-- @uri = @xml:id in TEI -->
    <xsl:variable name="href"><xsl:value-of select="@uri"/></xsl:variable>
    <a href="{$href}"> 
     <xsl:value-of select="./@*[namespace-uri()='http://www.w3.org/XML/1998/namespace' and local-name()='id']"/></a>:
   <!-- ### Problem starts here: find same value in element 'w' and element 'equiv' -->                            
   <xsl:for-each select="//w[@type='verb']">
   <!-- @xml:id in TEI -->
     <xsl:variable name="href"><xsl:value-of select="@xml:id"/> </xsl:variable>
     <a href="{$href}"> 
        <xsl:value-of select="./@*[namespace-uri()='http://www.w3.org/XML/1998/namespace' and local-name()='id']" /></a>
      <!-- look to first value of @ana of element 'w' = value of @xml:id of element 'equiv'  -->
         <xsl:if test="//w[@type='verb' and @ana[1]] = preceding::category/equiv/@*[namespace-uri()='http://www.w3.org/XML/1998/namespace' and local-name()='id']">
          <xsl:value-of select="//w[@type='verb'and @ana[1]]"/></xsl:if>
   </xsl:for-each>
  </li>
 </xsl:for-each>
</ul>
</xsl:stylesheet>

Раздел моего файла TEI-XML:

<!-- language TEI-XML -->
<!-- XPATH: /teiCorpus/teiHeader[1]/encodingDesc[1]/classDecl[1]/taxonomy[2]/category[4]/category[9] -->
<category n="9" xml:id="verb.motion" ana="#verb.category #action">
 <catDesc>taxonomy: motion verbs</catDesc>
 <category n="1" xml:id="meeting" ana="#verb.motion"> 
  <catDesc>subcategory of motion's verb as a concept: meeting  
  </catDesc>
  <category ana="#transcription" xml:lang="uga">
   <equiv n="1" xml:id="qry"/>
  </category>
 </category>

<!-- section taht gave me trouble to find data in XSLT -->
<!-- XPATH /teiCorpus/text[1]/body[1]/div1[2]/div2[2]/div3[2]/div4[2]/lg[1]/l[1]/w[2] -->
<w type="verb" ana="#qry #yQTL" xml:id="ktu1-3_ii_l4b-5a_tqry">

Например: если category/equiv[@xml:id] а также w[@type='verb' and @ana[1]] знак равно 'qry' (всегда первое значение @ana), дисплей "href" из @xml:id элемента 'w',

У меня нет проблем с первым select="following-sibling::category/equiv[@n]", У меня есть то, что я хочу. К сожалению для select="//w[@type='verb']"То, что я пробовал, не работает: вместо аналогичного "href" @xml:id у меня есть ВСЕ "href" и первое значение @ana.

Текущий результат:

QRY: ktu1-3_ii_l3b-4a_kl'atkl'at tqry tmtḫṣ tḫtṣ TMHS ЦМТ'tkt šnst tġll tgrš tmġyn tštql šb't tṯ'r t'R tmtḫṣn T'n tḫtṣb tḥdy т [д] ДДГ ktu1-3_ii_l4b-5a_tqrykl'at tqry tmtḫṣ tḫtṣ TMHS ЦМТ'tkt šnst tġll tgrš tmġyn tštql šb't tṯ'r t'R tmtḫṣn tḫn tḫtṣb tḥdy t[d]ġdd

Вместо:

qry: ktu1-3_ii_l4b-5a_tqry 'tqry', ktu1-4_ii_l10_qryt 'qryt'.

Может быть, проблема исходит от <xsl:if> что не является хорошим выбором?

Спасибо за вашу помощь.

1 ответ

Решение

Я не совсем понимаю ваш вопрос, но если вы пытаетесь получить w узел с конкретным значением в ana атрибут, вы могли бы извлечь выгоду из ключа.

<xsl:key name="w" match="w" use="tokenize(@ana, ' ')" />

Затем, если вы находитесь на equiv элемент, вы получите соответствие w узел, как так

<xsl:for-each select="key('w', concat('#', @xml:id))">
Другие вопросы по тегам