Выберите отдельный элемент в узле XSLT

Это мой XML-код:

<SECTOR_LIST>
    <LIGHT_SECTOR>
        <SECTOR1>22</SECTOR1>
        <SECTOR2>92</SECTOR2>
    </LIGHT_SECTOR>
    <LIGHT_SECTOR>
        <SECTOR1>22</SECTOR1>
        <SECTOR2>92</SECTOR2>
    </LIGHT_SECTOR>
    <LIGHT_SECTOR>
        <SECTOR1>92</SECTOR1>
        <SECTOR2>137</SECTOR2>
    </LIGHT_SECTOR>
    <LIGHT_SECTOR>
        <SECTOR1>92</SECTOR1>
        <SECTOR2>137</SECTOR2>
    </LIGHT_SECTOR>
</SECTOR_LIST>

Я создаю этот XSLT 1.0:

<xsl:for-each select="SECTOR_LIST"> 
    <xsl:for-each select="LIGHT_SECTOR">
        <xsl:text>VIS </xsl:text>
            <xsl:value-of select="SECTOR1"/>
            <xsl:text>-</xsl:text>
            <xsl:value-of select="SECTOR2"/>
            <br/>
    </xsl:for-each>
</xsl:for-each>

На выходе у меня было это: ВИС 22-92 ВИС 22-92 ВИС 92-137 ВИС 92-137

Я бы только: ВИС 22-92 ВИС 92-137


person Francesco Irrera    schedule 17.01.2014    source источник


Ответы (1)


Пожалуйста, попробуйте этот код:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:key name="sector" match="//LIGHT_SECTOR" use="."/>
<xsl:variable name="Sectors" select="//LIGHT_SECTOR"/>
<xsl:template match="SECTOR_LIST">
    <xsl:for-each select="$Sectors[count(. | key('sector', .)[1]) = 1]">
        <xsl:text>VIS </xsl:text>
        <xsl:value-of select="SECTOR1"/>
        <xsl:text>-</xsl:text>
        <xsl:value-of select="SECTOR2"/>
        <br/>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
person Joel M. Lamsen    schedule 17.01.2014
comment
выражения соответствия не обязательно должны начинаться с корня. match="//LIGHT_SECTOR" эквивалентно match="LIGHT_SECTOR" (вы правильно сделали в своем шаблоне, в конце концов, сопоставление выражений в ключах ничем не отличается). Также: код, выходящий за рамки очевидного, должен сопровождаться объяснением. - person Tomalak; 17.01.2014
comment
@Tomalak Спасибо, я постараюсь дать некоторые объяснения позже. Медленное подключение к Интернету побуждает меня загружать ответ как можно быстрее. - person Joel M. Lamsen; 17.01.2014