2014-01-17 4 views
0

Это мой XML-код:Выберите отдельный элемент в XSLT узел

<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> 

В выходной я имел это: VIS 22-92 VIS 22 -92 VIS 92-137 VIS 92-137

Я бы только: VIS 22-92 VIS 92-137

ответ

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> 
+0

матч выражение не должно начинаться с корня. 'match =" // LIGHT_SECTOR "' эквивалентно 'match =" LIGHT_SECTOR "' (вы сделали правильную вещь в своем шаблоне, ведь выражения соответствия в ключах не различаются). Кроме того: код, выходящий за пределы очевидного, должен сопровождаться объяснением. – Tomalak

+0

Очень хороший Джоэл :-) –

+0

@Tomalak Спасибо, я попробую позже пояснить. Это медленное подключение к Интернету, которое побуждает меня загружать ответ так быстро, как я мог. –

Смежные вопросы