2015-08-11 7 views
0

Я это XML, который должен быть преобразован:XSLT, если не значение, ни одна строка

<?xml version="1.0" encoding="utf-8"?> 
<racine> 
    <index> 
    <Parent nom="00000002" Name="" Address="" /> 
    <Meter numSerie="00000002" /> 
    <arrêté dateArrêté="28/02/2015 00:00:00"> 
     <ValeurIndex Libelle="PMAXVALUE0">0.104</ValeurIndex> 
    </arrêté> 
    </index> 
    <index> 
    <Parent nom="00000002B" Name="" Address="" /> 
    <Meter numSerie="" /> 
    <arrêté dateArrêté="28/02/2015 00:00:00"> 
     <ValeurIndex Libelle="R1INDEX0">3.754</ValeurIndex> 
     <ValeurIndex Libelle="PMAXVALUE0">1.047</ValeurIndex> 
    </arrêté> 
    </index> 
</racine> 

XSLT, что делает преобразование является:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="ISO-8859-1"/> 

<!-- Parcours des noeuds "racine/index" --> 
<xsl:variable name="v_separateur"> 
    <xsl:text>,</xsl:text> 
</xsl:variable> 

<!-- sort by date desc" --> 
<xsl:template match="/racine"> 
    <xsl:apply-templates select="index"> 
     <xsl:sort select="arrêté/@dateArrêté" order="descending" data-type="number"/> 
     </xsl:apply-templates> 
</xsl:template> 

<xsl:template match="index">   
    <!-- get repeating values once --> 
    <xsl:variable name="constants"> 
     <!-- SP_ID --> 
     <xsl:value-of select="Parent/@nom"/> 
     <xsl:value-of select="$v_separateur"/> 
     <!-- METER_NUMBER--> 
     <xsl:value-of select="Meter/@numSerie"/> 
     <xsl:value-of select="$v_separateur"/> 
     <!-- DATE & TIME--> 
     <xsl:value-of select="arrêté/@dateArrêté"/> 
     <xsl:value-of select="$v_separateur"/> 
    </xsl:variable> 
    <!-- Only Process OBIS* values ignore other --> 
    <xsl:apply-templates select="arrêté/ValeurIndex[ 
      @Libelle='EA.R00' 
     or @Libelle='EA.R01' 
     or @Libelle='EA.R02' 
     or @Libelle='EA.R03' 
     or @Libelle='EA.R05' 
     or @Libelle='EA.R06' 
     or @Libelle='EA.R07' 
     or @Libelle='EAE.R00' 
     or @Libelle='AEINDEX0' 
     or @Libelle='AEINDEX1' 
     or @Libelle='AEINDEX2' 
     or @Libelle='AEINDEX3' 
     or @Libelle='AEINDEX5' 
     or @Libelle='AEINDEX6' 
     or @Libelle='AEINDEX7' 
     or @Libelle='R1INDEX0' 
     or @Libelle='PMAXVALUE0' 
     ]"> 
     <xsl:with-param name="constants" select="$constants"/> 
    </xsl:apply-templates> 
    <!-- ADD NEW ROW --> 
    <xsl:value-of select="$constants"/> 
    <xsl:text>KWH</xsl:text> 
    <xsl:value-of select="$v_separateur"/> 
    <xsl:value-of select="$v_separateur"/> 
    <xsl:choose> 
     <xsl:when test="arrêté/ValeurIndex[@Libelle='EA.R00'] > arrêté/ValeurIndex[@Libelle='EA.R02']"> 
      <xsl:value-of select="arrêté/ValeurIndex[@Libelle='EA.R00']"/> 
       <xsl:text>&#xD;&#xA;</xsl:text> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="arrêté/ValeurIndex[@Libelle='EA.R02']"/> 
       <xsl:text>&#xD;&#xA;</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

<xsl:template match="ValeurIndex"> <!--match="ValeurIndex"--> 
    <xsl:param name="constants"/> 
    <xsl:value-of select="$constants"/> 
    <xsl:choose> 
     <xsl:when test="@Libelle = 'EA.R00'">KWH,PUNTA</xsl:when> 
     <xsl:when test="@Libelle = 'EA.R01'">KWH,VALLE</xsl:when> 
     <xsl:when test="@Libelle = 'EA.R02'">KWH,LLANO</xsl:when> 
     <xsl:when test="@Libelle = 'EA.R03'">KW,</xsl:when> 
     <xsl:when test="@Libelle = 'EA.R05'">KWH,</xsl:when> 
     <xsl:when test="@Libelle = 'EA.R06'">KVH,ER_Q2</xsl:when> 
     <xsl:when test="@Libelle = 'EA.R07'">KVH,ER_Q3</xsl:when> 
     <xsl:when test="@Libelle = 'EAE.R00'">KVH,ER_Q4</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX0'">KWH,PUNTA_SA</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX1'">KWH,VALLE_SA</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX2'">KWH,LLANO_SA</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX3'">KWH,</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX5'">KWH,ENERSAL</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX6'">KW,PUNTA</xsl:when> 
     <xsl:when test="@Libelle = 'AEINDEX7'">KW,VALLE</xsl:when> 
     <xsl:when test="@Libelle = 'R1INDEX0'">KW,LLANO</xsl:when> 
     <xsl:when test="@Libelle = 'PMAXVALUE0'">KW, PUNTA_SA</xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="Param[@code = 'TYPE_EQP']/@value"/> 
     </xsl:otherwise> 
    </xsl:choose> 
    <xsl:value-of select="$v_separateur"/> 
    <xsl:value-of select="."/> 
    <xsl:text>&#xD;&#xA;</xsl:text> 
</xsl:template> 

</xsl:stylesheet> 

Я хочу иметь только те строки, которые у нас есть какое-то значение, поэтому в данном случае:

00000002,00000002,28/02/2015 00:00:00,KW, PUNTA_SA,0.104 
00000002B,,28/02/2015 00:00:00,KW,LLANO,3.754 
00000002B,,28/02/2015 00:00:00,KW, PUNTA_SA,1.047 

Но, как мы ставим максимум EA.R00 и EA.R02 I будет иметь ряд без даты и withou t данных. Я хочу, чтобы в случае, если оба значения не существуют, ничего не пишите. Поскольку XSLT прямо сейчас, я буду получать:

00000002,00000002,28/02/2015 00:00:00,KW, PUNTA_SA,0.104 
00000002,00000002,28/02/2015 00:00:00,KWH,, 
00000002B,,28/02/2015 00:00:00,KW,LLANO,3.754 
00000002B,,28/02/2015 00:00:00,KW, PUNTA_SA,1.047 
00000002B,,28/02/2015 00:00:00,KWH,, 

(я не хочу видеть, 2-й и 5-й ряд)

Благодарности

+0

Глядя на «Я хочу» выходе образца, кажется, что вы не хотите, чтобы увидеть 2-й и ** ** пятая строка вашего «прямо сейчас» выход пробы , а не 2-й и 4-й ... правильно? – LarsH

+0

взлеты, да извините, вы правы – Raul

ответ

1

Лишние линии вашего сослаться выводится кодом после комментария <!-- ADD NEW ROW -->. Что вы можете сделать, это обернуть этот код в xsl:if, чтобы проверить, существует ли EA.R00 или EA.R02.

Попробуйте это:

<!-- ADD NEW ROW --> 
<xsl:if test="arrêté/ValeurIndex[@Libelle='EA.R00' or @Libelle='EA.R02']"> 
    <xsl:value-of select="$constants"/> 
    <xsl:text>KWH</xsl:text> 
    <xsl:value-of select="$v_separateur"/> 
    <xsl:value-of select="$v_separateur"/> 
    <xsl:choose> 
     <xsl:when test="arrêté/ValeurIndex[@Libelle='EA.R00'] > arrêté/ValeurIndex[@Libelle='EA.R02']"> 
      <xsl:value-of select="arrêté/ValeurIndex[@Libelle='EA.R00']"/> 
       <xsl:text>&#xD;&#xA;</xsl:text> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="arrêté/ValeurIndex[@Libelle='EA.R02']"/> 
       <xsl:text>&#xD;&#xA;</xsl:text> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:if> 
Смежные вопросы