2013-01-13 50 views
2

我正在嘗試在進行轉換時寫入'NULL'。 轉換是爲了在MySQL數據庫中插入數據。 我已經試過這樣:標籤爲空時使用XSL轉換寫'NULL'

>  <xsl:if test="incidencia =''"> <xsl:text>'NULL</xsl:text> </xsl:if> 

但它不工作。

這是我的XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 

    <entregats> 
     <envio id="GI-000008"> 
      <estats totalestats="3"> 
       <estat datahora="2012-12-02T12:01:55"> 
        <IDEstat>CAM</IDEstat> 
        <incidencia> No s ha pogut trobar el cami </incidencia> 
       </estat> 
       <estat datahora="2012-12-03T12:01:55"> 
        <IDEstat>CAM</IDEstat> 
        <incidencia> Destinetari Absent</incidencia> 
       </estat> 
       <estat datahora="2012-12-04T12:02:55"> 
        <IDEstat>CAM</IDEstat> 
        <incidencia> Destinetari Absent </incidencia> 
       </estat> 

      </estats> 

      <receptor> 
       <nom>J</nom> 
       <cognom>R</cognom> 
       <telefon>972510125</telefon> 
       <adreca>C/ZopeZope, nº15</adreca> 
       <codipostal>19000</codipostal> 
      </receptor> 

     </envio> 
     <envio id="GI-000009"> 

      <estats totalestats="2"> 
       <estat datahora="2012-12-01T09:01:55"> 
        <IDEstat>CAM</IDEstat> 
       </estat> 
       <estat datahora="2012-12-01T12:01:55"> 
        <IDEstat>ENT</IDEstat> 
       </estat> 
      </estats> 

      <receptor> 
       <nom>X</nom> 
       <cognom>S</cognom> 
       <cognom>P</cognom> 
       <telefon>972500025</telefon> 
       <adreca>C/Patatones, nº27</adreca> 
       <codipostal>17000</codipostal> 
      </receptor> 

     </envio> 
     <envio id="GI-000010"> 

      <estats totalestats="3"> 
       <estat datahora="2012-12-05T08:21:57"> 
        <IDEstat>CAM</IDEstat> 
       </estat> 
       <estat datahora="2012-12-06T15:21:57"> 
        <IDEstat>CAM</IDEstat> 
       </estat> 
       <estat datahora="2012-12-07T15:21:57"> 
        <IDEstat>ENT</IDEstat> 
       </estat> 
      </estats> 

      <receptor> 
       <nom>D</nom> 
       <cognom>H</cognom> 
       <cognom>P</cognom> 
       <telefon>972500125</telefon> 
       <adreca>C/Oracle, nº12</adreca> 
       <codipostal>17000</codipostal> 
      </receptor> 

     </envio> 

    </entregats> 

這是我的XSL:

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" exclude-result-prefixes="xd" version="1.0"> 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="//envio" /> 
    </xsl:template> 

    <xsl:template match="envio"> 
     <xsl:for-each select="estats/estat">  
    <xsl:text>INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values (</xsl:text> 
     <xsl:text>'</xsl:text> 
      <xsl:value-of select="../../@id"/><xsl:text>','</xsl:text>   
      <xsl:value-of select="@datahora"/><xsl:text>','</xsl:text> 
      <xsl:value-of select="IDEstat"/><xsl:text>'</xsl:text> 
      <xsl:if test="incidencia =''"> 
       <xsl:text>'NULL</xsl:text> 
      </xsl:if> 
      <xsl:if test="incidencia !=''">  
       <xsl:text>,'</xsl:text> <xsl:value-of select="incidencia"/> 
       <xsl:text>'</xsl:text>     
      </xsl:if>     
     <xsl:text>); </xsl:text>  
     </xsl:for-each>    
    </xsl:template> </xsl:stylesheet> 

如果有人可以提供幫助。

我已經得到的輸出是這樣的:

INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000008','2012-12-02T12:01:55','CAM',' No s ha pogut trobar el cami '); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000008','2012-12-03T12:01:55','CAM',' Destinetari Absent'); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000008','2012-12-04T12:02:55','CAM',' Destinetari Absent '); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000009','2012-12-01T09:01:55','CAM'); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000009','2012-12-01T12:01:55','ENT'); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000010','2012-12-05T08:21:57','CAM'); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000010','2012-12-06T15:21:57','CAM'); 
INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values ('GI-000010','2012-12-07T15:21:57','ENT'); 

,我需要的不是incidencia時寫「NULL」。

回答

2

您的estat元素中的某些元素沒有incidencia,並且在這些情況下,您的測試值不會被評估爲真。

您可以替換與xsl:choose你的兩個xsl:if條件來評估是否normalize-space(incidencia)計算結果爲真(這隻會是如果incidencia元素存在,並具有text()內容的情況下),否則生成'NULL'

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" exclude-result-prefixes="xd" version="1.0"> 
    <xsl:output method="text"/> 

    <xsl:template match="/"> 
     <xsl:apply-templates select="//envio" /> 
    </xsl:template> 

    <xsl:template match="envio"> 
     <xsl:for-each select="estats/estat">  
      <xsl:text>INSERT INTO HISTORIC_ESTATS (IDEnvio,DATAHORA,IDESTAT,INCIDENCIA) values (</xsl:text> 
      <xsl:text>'</xsl:text> 
      <xsl:value-of select="../../@id"/><xsl:text>','</xsl:text>   
      <xsl:value-of select="@datahora"/><xsl:text>','</xsl:text> 
      <xsl:value-of select="IDEstat"/><xsl:text>'</xsl:text> 
      <xsl:text>,</xsl:text> 
      <xsl:choose> 
       <xsl:when test="normalize-space(incidencia)"> 
        <xsl:text>'</xsl:text> 
        <xsl:value-of select="incidencia"/> 
        <xsl:text>'</xsl:text>  
       </xsl:when> 
       <xsl:otherwise> 
        <!--there is either no incidencia, or it has no value--> 
        <xsl:text>'NULL'</xsl:text> 
       </xsl:otherwise> 
      </xsl:choose> 

      <xsl:text>); </xsl:text>  
     </xsl:for-each>    
    </xsl:template> 
</xsl:stylesheet> 
+0

謝謝各位! – kimpa2007

1

嘗試<xsl:if test="incidencia">而不是<xsl:if test="incidencia =''">,因爲您要測試節點的存在。