如何在另一个节点中声明将属性与另一个属性绑定的变量?

时间:2019-05-02 15:03:23

标签: xslt

我需要声明一个变量。我想在此变量中链接/绑定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'"/>

1 个答案:

答案 0 :(得分:1)

我认为您需要阅读keys。如果您要查找当前Turn的{​​{1}}元素,可以像这样定义一个键

Speaker

然后,在获得发言者的<xsl:key name="turns" match="Turn" use="@speaker" /> 内,您可以使用键来计算xsl:for-each元素的数量,如下所示:

turn

(我省略了对<xsl:value-of select="count(key('turns', @id)/tour/motBDL)" /> 的检查,因为您的XML中没有任何匹配的值)

尝试此XSLT作为起点:

@lexeme='JE'

并且,作为一个示例,如果要列出各个转弯,还可以定义一个键来查找<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