1 Вопрос: Как объявить переменную, которая связывает атрибут с другим, в другом узле?

вопрос создан в Thu, May 2, 2019 12:00 AM

Мне нужно объявить переменную. Я хотел бы связать /связать 2 атрибута в этой переменной.

<xsl:variable name="politiciens" select="Trans/Speakers/Speaker/@id='Trans/Episode/Section/Turn/@speaker'"/>`

    XSL =
    <xsl:for-each select="Trans/Speakers/Speaker[@check='yes']">
    <!-- declare a variable which contain @id, and whom will link/tie @speaker from Turn-->
    <xsl:variable name="politiciens" select="@id=//Turn/@Speaker" />
     <tr>
      <td><xsl:value-of select="@name"/></td>
       td><xsl:value-of select="count(Trans/Episode/Section/Turn[@Speaker=$politiciens]/tour/motBDL[@lexeme='JE'])" /></td>
    </tr>
    </xsl:for-each>

XML =

<Trans scribe="ComputerName" audio_filename="Debat Hollande Sarkozy 1998" video_filename="" version="8" version_date="181221">
     <Speakers>
        <Speaker id="spk1" name="Nicolas Sarkozy" check="yes"/>
    </Speakers>
    <Episode>
        <Section type="report" startTime="0" endTime="1408.652">
          <Turn startTime="0" endTime="0.152">
            <Sync time="0"/>
          </Turn>
          <Turn speaker="spk1" startTime="0.152" endTime="3.038">
            <Sync time="0.152"/>
            <tour nbmots="14" id="000000">
              <motBDL lexeme="POUR">pour</motBDL>
    </tour>
    </Turn>
    </Section>
    </Episode>
    </Trans>

Ожидаемый = два атрибута, которые должны быть связаны вместе <xsl:variable name="politiciens" select="@id='@speaker'"/>

    
0
1 ответ                              1                         

Мне кажется, это звучит так, как будто вам нужно прочитать

Затем в вашем xsl:for-each, который получает динамики, вы можете использовать клавишу для подсчета количества элементов turn, например, так:

<xsl:value-of select="count(key('turns', @id)/tour/motBDL)" />

(я пропустил проверку @lexeme='JE', потому что в вашем XML нет подходящего значения)

Попробуйте этот XSLT в качестве отправной точки:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" indent="yes" />

  <xsl:key name="turns" match="Turn" use="@speaker" />

  <xsl:template match="/">
    <table>
      <xsl:for-each select="Trans/Speakers/Speaker[@check='yes']">
        <tr>
          <td><xsl:value-of select="@name"/></td>
          <td><xsl:value-of select="count(key('turns', @id)/tour/motBDL)" /></td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>

И, в качестве примера, вы также можете определить ключ для поиска самих элементов Speaker, если вы хотите перечислить отдельные повороты.

Например ....

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" indent="yes" />

  <xsl:key name="speakers" match="Speaker" use="@id" />

  <xsl:template match="/">
    <table>
      <xsl:for-each select="Trans/Episode/Section/Turn[@speaker != '']">
        <tr>
          <td><xsl:value-of select="key('speakers', @speaker)/@name"/></td>
          <td><xsl:value-of select="@startTime" /></td>
        </tr>
      </xsl:for-each>
    </table>
  </xsl:template>
</xsl:stylesheet>
    

1
2019-05-02 15: 23: 20Z
  1. Спасибо, это часть моей программы, поэтому в моем XML много lexeme="JE", и мне нужно сделать это с lexeme="JE" lexeme="TU" и т. д. Моя проблема is: Trans/speakers/speaker/@id и Trans/Episode/section/Turn/tour/motBDL/@speaker равны тем же элементам (spk1 /spk2 /spk3), и мне нужно объяснить моему компьютеру, что они равны. Учитель сказал мне, что это выполнимо с помощью строки кода <xsl:variable select=""/> +, затем с Turn[@Speaker=$variable] до <xsl:value-of select=""/>, и я не могу понять, что и как. Большое спасибо за помощь! (Я знаю, что s * ck)
    2019-05-02 17: 28: 05Z
  2. Без ключа вы бы определили свою переменную как <xsl:variable name="speakerId" select="@id" />, и тогда вашим выражением подсчета будет count(/Trans/Episode/Section/Turn[@speaker = $speakerId]/tour/motBDL). Но ключи являются предпочтительным решением, поскольку именно для этого они и были разработаны.
    2019-05-02 17: 33: 28Z
  3. Ох. Спасибо, тогда я оставлю это под своей шляпой для другой работы! Хотя я думаю, что должен сделать то, что сказал мне мой учитель. Спасибо за все!
    2019-05-02 18: 58: 11Z
источник размещен Вот