我正在尝试在进行转换时写'NULL'。 转换是在mysql数据库中进行make插入。 我试过这个:
> <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'。
答案 0 :(得分:2)
您的某些estat
元素没有incidencia
,并且在这些情况下,您对其值的测试不会评估为true。
您可以使用xsl:if
替换两个xsl:choose
条件,以评估normalize-space(incidencia)
是否计算为true(仅当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>
答案 1 :(得分:1)
请尝试<xsl:if test="incidencia">
而不是<xsl:if test="incidencia =''">
,因为您要测试节点是否存在。