2

当我进行转换时,我正在尝试写“NULL”。转换用于在 mysql 数据库中进行插入。我试过这个:

>     <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');

当不是偶然事件时,我需要写“NULL”。

4

2 回答 2

2

在这些情况下,您的某些estat元素没有 aincidencia并且您对其值的测试不会评估为 true。

您可以将您的两个xsl:if条件替换为xsl:choose以评估是否评估为真(仅当元素存在且具有内容normalize-space(incidencia)时才会出现这种情况),否则生成.incidenciatext()'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>
于 2013-01-13T22:01:25.530 回答
1

尝试<xsl:if test="incidencia">代替<xsl:if test="incidencia =''">,因为您想测试节点是否存在。

于 2013-01-13T22:00:16.627 回答