I有一个XML输入文件。我使用xslt将输入文件中的元素映射并写入应用程序的put webservice操作。有些元素没有任何值(null(。我想知道如何使用xslt对条件进行编码,以便当这些列字段没有值时,它们不会向相应的映射元素/s写入任何内容,或者您可以说忽略元素/s本身以避免更新。
下面是一个有3行的输入文件示例:
Rownum是行号,Text2是SSN,Text3是员工ID。如果有员工ID,那么Web服务XML会进行验证,还需要将该员工的可用性百分比更新为100。
行号、文本2、文本3
1321-99-9999001
2002年2月
3652-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元素很有效。当输入文件中没有此元素的值时,不会对webservice进行更新。当有一个值时,会对webservice进行相应的更新。
对于作为员工ID的Text3元素,当存在值时,该元素将被更新。可用性元素(百分比(也会更新为100。
当没有Text3元素(没有员工ID(时,XSLT将失败。抛出验证错误,声明";内部元素"Emp"上的元素内容"Availability"是必需的。
正如您在上面看到的,我已经为Text2和Text3元素使用了/条件语句。当Text2在输入文件中具有null值时,它不会像我在Text3元素为null时得到的那样抛出任何错误。根据错误信息,我猜是当Text3为null时,条件语句的结构可能无法正常工作。我们非常感谢为解决这一问题提供的任何帮助。
感谢您的回复,我忽略了条件构造必须在父节点之前"Emp";以便在EmpID为空时将该条件应用于子元素"Availability"one_answers"EmpID"。这样做解决了问题。