Xml XSLT2.0如何在输入文件上的字段为空时跳过对元素的写入

Xml XSLT2.0如何在输入文件上的字段为空时跳过对元素的写入,xml,web-services,xslt,xpath,xslt-2.0,Xml,Web Services,Xslt,Xpath,Xslt 2.0,我有一个XML输入文件。我使用xslt将输入文件中的元素映射并写入应用程序的PutWebService操作。某些元素没有任何值(null)。我想知道如何使用xslt对条件进行编码,这样当这些列字段没有值时,它们就不会向相应的映射元素写入任何内容,或者可以说忽略元素本身以避免更新 下面是一个包含3行的输入文件示例: Rownum是rownumer,Text2是SSN,Text3是Employee ID。如果有Employee ID,那么webservice XML有一个验证,它还需要将该员工的可用

我有一个XML输入文件。我使用xslt将输入文件中的元素映射并写入应用程序的PutWebService操作。某些元素没有任何值(null)。我想知道如何使用xslt对条件进行编码,这样当这些列字段没有值时,它们就不会向相应的映射元素写入任何内容,或者可以说忽略元素本身以避免更新

下面是一个包含3行的输入文件示例:

Rownum是rownumer,Text2是SSN,Text3是Employee ID。如果有Employee ID,那么webservice XML有一个验证,它还需要将该员工的可用性百分比更新为100

Rownum,Text2,Text3

1321-99-999901

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元素,当存在值时,该元素将被更新。另外,availability元素(百分比)将更新为100

当没有Text3元素(没有员工ID)时,XSLT会失败。 在内部元素“Emp”上引发验证错误,声明“需要元素内容“可用性”

正如您在上面看到的,我对Text2和Text3元素使用了/conditional语句。 当Text2在输入文件中有空值时,它不会像Text3元素为空时那样抛出任何错误。根据错误消息,我猜它是空的
当Text3为null时,条件语句的结构可能无法正常工作。非常感谢为解决此问题提供的任何帮助。

感谢您的回答,我忽略了条件构造必须在父节点“Emp”之前“以便在EmpID为空时将该条件应用于子元素‘可用性’和‘EmpID’。“我有一个XML输入文件。”我没有看到它。请张贴一份包含输入和预期输出的报告。以及可以执行的XSLT尝试,而不是断章取义的片段。请同时提供一个真正的、格式良好的XML文档,XSLT转换将应用于该文档。