Как посчитать () элемент в атрибуте, который не находится в том же lv, что и другой? - PullRequest
0 голосов
/ 02 мая 2019

Я не могу заставить свою таблицу Xslt работать, хотя я пробовал много способов написать эти строки count ().

Посмотрите код ниже, прежде чем смотреть на мои попытки. Я пробовал : (1)

<xsl:for-each select="Trans/Episode/Section/Turn/tour">
<tr>
   <td><xsl:value-of select="count(motBDL[@lexeme='JE'])" /></td>
</tr>
</xsl:for-each>

(2)

<td><xsl:value-of select="count(motBDL[lexeme='JE'])" /></td>

(3)

<xsl:for-each select="Trans">
<td><xsl:value-of select="count(/Episode/Section/Turn/tour/motBDL[@lexeme='JE'])" /></td>

(4) `

то же самое с (5; 6; 7; 8) "()" вместо "[]"

XML =

   <!--The entire code is correct (just for you to understand what I am trying to extract)-->
    <?xml version="1.0" encoding="UTF8" standalone="yes"?>
    <?xml-stylesheet type="text/xsl" href="Projet-Info.xsl"?>
    <!DOCTYPE Trans SYSTEM "trans-corpus.dtd">
    <Trans scribe="computer-name" audio_filename="Debat Hollande Sarkozy 1998" video_filename="" version="8" version_date="181221">
    <Speakers>
        <Speaker name="Nicolas Sarkozy" check="yes"/>
        <Speaker name="François Hollande" check="yes"/>
        <Speaker name="Journaliste" check="no"/>
        <Speaker name="Journaliste 2" check="no"/>
      </Speakers>
      <Episode>
        <Section type="report" startTime="0" endTime="1408.652">
            <Sync time="0.152"/>
            <Turn speaker="spk1" startTime="0.152" endTime="3.038">
            <tour nbmots="6" id="000000">
              <motBDL lexeme="POUR" phon="puʁ">pour</motBDL>
              <motBDL lexeme="MOI" phon="mwa">moi</motBDL>
              <motBDL lexeme="JE" phon="ʒə">je</motBDL>
              <motBDL lexeme="NE" phon="nə">ne</motBDL>
              <motBDL lexeme="SAVOIR" phon="save">savais</motBDL>
              <motBDL lexeme="PAS" phon="pa">pas</motBDL>
            </tour>
         </Turn>
        </Section>
      </Episode>
    </Trans>

XSL =

<!--Code b4 is correct-->
<table border="2" style="text-align: center;">
  <tr>
   <!--<th>nom</th>-->
   <th>je</th>
  </tr>
 <xsl:for-each select="Trans">
 <xsl:if test="not(@check='no')">
   <tr>
    <td><xsl:value-of select="Speakers/Speaker/@name" /></td>
    <td><xsl:value-of select="count(Episode/Section/Turn/tour/motBDL[@lexeme='JE'])" /></td>
   </tr>
 </xsl:if>
 </xsl:for-each>
</table>
<!--Code after is correct-->
<!--I expect when I run my program on firefox to actually run.-->

1 Ответ

0 голосов
/ 02 мая 2019

Вы начали свое выражение с косой черты ....

/Episode/Section/Turn/tour/motBDL[@lexeme='JE']

Это означает, что выражение xpath будет относительным относительно узла документа, а не относительно узла, на котором вы сейчас находитесь.Вы должны сделать это ...

<xsl:value-of select="count(Episode/Section/Turn/tour/motBDL[@lexeme='JE'])" />

У вас также есть та же проблема с этим утверждением

<xsl:value-of select="/Speakers/Speaker/@nom" />

И это также относится к атрибуту, который не существует.Если вы намеревались написать @name здесь, имейте в виду, что в XSLT 1.0, если вы сделаете xsl:value-of и выберете несколько узлов, будет выводиться только первый.

Кроме того, обратите внимание, у вас естьдве ?xml-stylesheet директивы в вашем XSLT.Я не уверен, что это разрешено .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...