当输入文件上的字段为空时,XSLT 2.0 如何跳过写入元素
Posted
技术标签:
【中文标题】当输入文件上的字段为空时,XSLT 2.0 如何跳过写入元素【英文标题】:XSLT 2.0 how to skip writing to an element when field on input file is null 【发布时间】:2021-06-16 04:57:24 【问题描述】:我有一个 XML 输入文件。我正在使用 xslt 将输入文件中的元素映射并写入应用程序的 put webservice 操作。有些元素没有任何值(null)。我想知道如何使用 xslt 对条件进行编码,这样当这些列字段没有值时,它们不会向相应的映射元素写入任何内容,或者您可以说忽略元素本身的更新。
下面是一个 3 行的输入文件示例:
Rownum 是行号,Text2 是 SSN,Text3 是员工 ID。如果有员工 ID,则 Web 服务 XML 有一个验证,该验证还需要将该员工的可用性百分比更新为 100。
Rownum、Text2、Text3
1,321-99-9999,001
2,002
3,652-77-7777,
我的代码是这样的 -
<xsl:param name='Text2'/>
<xsl:param name='Text3'/>
<xsl:variable name='pct' select='100.00'/>
<SSN>
<xsl:choose>
<xsl:when test= "($Text2!='')">
<em:em:type="SSN"><xsl:value-of select='$Text2'/>
</xsl:when>
</xsl:choose>
</SSN>
<Emp>
<xsl:choose>
<xsl:when test="($Text3!='')">
<em:Availability><xsl:value-of select="$pct"/></em:Availability>
<em:ID:em:type="EmpID"><xsl:value-of select='$Text3'/></em:ID>
</xsl:when>
</xsl:choose>
</Emp>
在将上述 xslt 应用于输入文件时,第 1 行和第 2 行通过 web 服务加载,但我在第 3 行收到验证错误。
它似乎对输入文件的 Text2 元素工作正常。当此元素的输入文件中没有值时,不会对 web 服务进行更新。当有值时,对webservice进行相应的更新。
对于作为员工 ID 的 Text3 元素,当有值时,该元素会被更新。可用性元素(百分比)也更新为 100。
当没有 Text3 元素(没有员工 ID)时,XSLT 失败。 引发验证错误,说明“在内部元素 'Emp' 上需要元素内容 'Availability'。
正如您在上面看到的,我对 Text2 和 Text3 元素使用了 / 条件语句。 当 Text2 在输入文件中具有空值时,它不会像我在 Text3 元素为空时遇到的那样抛出任何错误。根据错误消息,我猜是 当 Text3 为空时,条件语句的结构可能无法正常工作。非常感谢任何解决此问题的帮助。
【问题讨论】:
“我有一个 XML 输入文件。” 我没看到。请张贴minimal reproducible example 包括。输入和预期输出。以及可以执行的 XSLT 尝试 - 不是脱离上下文的 sn-p。 请同时提供一个真实的、格式良好的 XML 文档,在该文档上应用 XSLT 转换。 【参考方案1】:感谢您的回复,我忽略了条件构造必须在父节点“Emp”之前,以便在 EmpID 为空时将条件应用于子元素“Availability”和“EmpID”。这样做可以解决问题。
【讨论】:
以上是关于当输入文件上的字段为空时,XSLT 2.0 如何跳过写入元素的主要内容,如果未能解决你的问题,请参考以下文章
当日期为空时,如何在日期输入字段中显示设置为“mm/dd/yyyy”而不是“1/1/0001”的占位符?
当输入字段为空时,Javascript 计算返回 NaN [重复]
我有一种形式可以更新mysql中的某些值,当输入为空时,如何避免更新单元格?