gpt4 book ai didi

xml - 标签为空时使用 XSL 转换写入 'NULL'

转载 作者:行者123 更新时间:2023-12-04 05:15:38 26 4
gpt4 key购买 nike

我在做转换时试图写 '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”。

最佳答案

您的一些 estat元素没有 incidencia在这些情况下,您对其值(value)的测试不会评估为真。

您可以更换您的两个 xsl:if条件与 xsl:choose评估是否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>

关于xml - 标签为空时使用 XSL 转换写入 'NULL',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com