MuleSoft DataWeave检查XML文件是否存在

MuleSoft DataWeave检查XML文件是否存在,mule,dataweave,Mule,Dataweave,我有以下mule DataWeave转换: ([]) when (payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments =="") otherwise { Id: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.@id as :string, Date: payload.ns0#GetFutureAppointmentsRespo

我有以下mule DataWeave转换:

([]) when (payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments =="") otherwise 
{
Id: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.@id as :string,
Date: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Date,
Time: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Time,
Cancel: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Cancel as :string,
VisitType: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#VisitType,
VisitTypeID: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#VisitTypeID as :string,
Duration: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Duration as :string,
Confirm: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Confirm as :string,
Providers: {
    Provider: {
        Id: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.@id as :string,
        Name: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.@name,
        Department: {
            Id: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.ns0#Department.@id as :string,
            Name: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.ns0#Department.@name,
            Center: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.ns0#Department.@center,
            DepartmentDirections: "" when payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.ns0#Department.ns0#DepartmentDirections == null otherwise payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Providers.ns0#Provider.ns0#Department.ns0#DepartmentDirections
        }
    }
},
PatientInstructions: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#PatientInstructions,
Copay: payload.ns0#GetFutureAppointmentsResponse.ns0#Appointments.ns0#Appointment.ns0#Copay as :string
}
除了字段DepartmentDirections不总是在XML中传递之外,其他一切都正常。所以现在,当我添加这个字段时,我的Web服务不会返回任何内容,但当我删除它时,它会工作。由于字段可能在那里,也可能不在那里,我认为在字段不在那里的情况下检查null不会有帮助。是否有一种方法可以轻松检查实际字段是否存在,而不是赋值前的值?

添加标题skipNullOn=everywhere,如果输入中不存在,则转换时将跳过字段。 %输出应用程序/json skipNullOn=everywhere 仅适用于XML和JSON


仅供参考:

与您的问题没有直接关系,但请帮自己一个忙,并将其中的大部分提取到有效负载的%var中。ns0GetFutureAppointsResponse.ns0Appoints.ns0Appointment块。