【发布时间】: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 转换。
标签: xml web-services xslt xpath xslt-2.0