2015-07-13 18 views
0

我有一個問題,使最多2個不同的值。xslt最大值之間已經顯示的2個值

我有下面的xml文件,那是我的系統的導出。

<?xml version="1.0" encoding="utf-8"?> 
<racine Version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<index nom="Facturation" DateMAJ="20150520170532" HeureMAJ="17:05:32"> 
<Parent nom="00000002B" DateMAJ="04/03/2015 14:51:00" HeureMAJ="14:51:00" type="PDL"> 
<Attributs /> 
</Parent> 
<Propriété IdExterne="" NomEquipement="00000002B" Numero="0" /> 
<equipement obsolete="INTERDIT" numSerie="" numSerieClient="00000002" numSerieADS="00000002" type="SL7000" cfg="Standard-ENAMC"> 
<Attributs /> 
<idExt n="GDO" /> 
<idExt n="CONTRAT" /> 
<idExt n="LIVRAISON" /> 
<idExt n="REF_CLI" /> 
</equipement> 
<Meters> 
<Meter nom="00000002B" numSerieClient="00000002" numSerieADS="00000002" type="SL7000" fluide="1" cfg="Standard-ENAMC"> 
<Item name="attachBegin" value="19850101" /> 
<Item name="attachEnd" value="20500101" /> 
</Meter> 
</Meters> 
<arrêté dateArrêté="20150301000000" indexCourant="False" etiquette="0"> 
<ValeurIndex Libelle="IND_DON_PERIOD">M</ValeurIndex> 
<ValeurIndex Libelle="IND_DON_CONTRAT">F</ValeurIndex> 
<ValeurIndex Libelle="IND_DON_CALCMODE">A</ValeurIndex> 
<ValeurIndex Libelle="EA.R00">23334.000000</ValeurIndex> 
<ValeurIndex Libelle="EA.R01">5186.000000</ValeurIndex> 
<ValeurIndex Libelle="EA.R02">2790.000000</ValeurIndex> 
<ValeurIndex Libelle="EA.R03">8545.000000</ValeurIndex> 
<ValeurIndex Libelle="EA.R05">7778.000000</ValeurIndex> 
<ValeurIndex Libelle="EA.R06">7777.000000</ValeurIndex> 
<ValeurIndex Libelle="EA.R07">7779.000000</ValeurIndex> 
<ValeurIndex Libelle="EAE.R00">33.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX0">0.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX1">0.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX2">0.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX3">0.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX5">0.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX6">0.000000</ValeurIndex> 
<ValeurIndex Libelle="AEINDEX7">0.000000</ValeurIndex> 
<ValeurIndex Libelle="R1INDEX0">3754.000000</ValeurIndex> 
<ValeurIndex Libelle="PMAXVALUE0">1047</ValeurIndex> 
<ValeurIndex Libelle="PMAXDATE0">02/11/2015 17:10:00</ValeurIndex> 
<ValeurIndex Libelle="IND_DON_CFG">SL7000.STANDARD-ENAMC.1.0.2</ValeurIndex> 
</arrêté> 
</index> 
</racine> 

我XLST變換是我在下面:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" version="1.0" encoding="ISO-8859-1" indent="yes"/> 
<!-- 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:for-each select="index"> 
<xsl:sort select="arrêté/@dateArrêté" order="descending" data-type="number"/> 
<xsl:call-template name="Arrete"/> 
</xsl:for-each> 
</xsl:template> 


<xsl:template name="Arrete"> 
<!-- Only Process OBIS* values ignore other --> 
<xsl:for-each 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:call-template name="ValeurIndex" /> 
</xsl:for-each> 
</xsl:template> 



<xsl:template name="ValeurIndex"> <!--match="ValeurIndex"--> 
<!-- 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: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:text>,</xsl:text> 
<xsl:value-of select="."/> 
<xsl:text>&#xD;&#xA;</xsl:text> 
</xsl:template> 
</xsl:stylesheet> 

,我得到的結果是:

00000002,00000002,28/02/2015 00:00:00,KWH,PUNTA,23.334 
00000002,00000002,28/02/2015 00:00:00,KWH,VALLE,5.186 
00000002,00000002,28/02/2015 00:00:00,KWH,LLANO,2.79 
00000002,00000002,28/02/2015 00:00:00,KW,,8.545 
00000002,00000002,28/02/2015 00:00:00,KWH,,7.778 
00000002,00000002,28/02/2015 00:00:00,KVH,ER_Q2,7.777 
00000002,00000002,28/02/2015 00:00:00,KVH,ER_Q3,7.779 
00000002,00000002,28/02/2015 00:00:00,KVH,ER_Q4,0.033 
00000002,00000002,28/02/2015 00:00:00,KWH,PUNTA_SA,3234 
00000002,00000002,28/02/2015 00:00:00,KWH,VALLE_SA,342 
00000002,00000002,28/02/2015 00:00:00,KWH,LLANO_SA,342 
00000002,00000002,28/02/2015 00:00:00,KWH,,0 
00000002,00000002,28/02/2015 00:00:00,KWH,ENERSAL,0 
00000002,00000002,28/02/2015 00:00:00,KW,PUNTA,0 
00000002,00000002,28/02/2015 00:00:00,KW,VALLE,0 
00000002,00000002,28/02/2015 00:00:00,KW,LLANO,3.754 
00000002,00000002,28/02/2015 00:00:00,KW, PUNTA_SA,0.104 

但我的問題是,我想一個新行添加到上面的文件,其中顯示最大值之間:

<xsl:when test="@Libelle = 'EA.R00'"> 

<xsl:when test="@Libelle = 'EA.R02'"> 

在上面的例子將是EA.R00(23.334)。所以我想添加一行: 00000002,00000002,28/02/2015 00:00:00,KWH ,, 23.334 您必須注意,我希望獲得值後,我需要char KW的值最大值。

有人可以幫我解決這個問題嗎?

感謝

回答

0

如果我正確理解你的問題,你需要像添加(!):

<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:when> 
    <xsl:otherwise> 
     <xsl:value-of select="arrêté/ValeurIndex[@Libelle='EA.R02']"/> 
    </xsl:otherwise> 
</xsl:choose> 

到處理index節點的一部分。

爲了避免重複相同的代碼兩次(也使你的代碼更易讀),我建議你重新調整它:

XSLT 1.0

<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:when> 
     <xsl:otherwise> 
      <xsl:value-of select="arrêté/ValeurIndex[@Libelle='EA.R02']"/> 
     </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> 
+0

嗨,我有一些問題在這裏我之前並沒有意識到。 EA.R00和EA.R02之間的最大值,如果我沒有任何值「NULL」(字段爲空)。我不應該糾正整行。現在如果我沒有這些值我沒有寫: 00000002,00000002,,KWH ,, 我該如何解決這個問題? – Raul

+0

@Raul對不起,我沒有關注。 –