Я использую XSLT 1.0 для преобразования документа XML в другую схему XML.Исходный документ может иметь или не иметь элементы в зависимости от исходной базы данных, из которой он построен.
EG
<Patients>
<Patient id="1019">
<Surname>Acqua</Surname>
<Forenames>Matthew James</Forenames>
<VoicePhone>0111 222 33333</VoicePhone>
</Patient>
<Patient id="1020">
<Surname>Red</Surname>
<Forenames>James Alan</Forenames>
</Patient>
</Patients>
Полученный результат после преобразования через XML будет содержать пустые элементы, потому чтоVoicePhone во втором пациенте не существует (а не существует, но он пуст).
XSLT имеет следующий вид:
<xsl:template match="//Patients/Patient">
<PatientRxs>
<PatientInfo>
<FirstName>
<xsl:value-of select="Forenames"/>
</FirstName>
<Telephone>
<xsl:value-of select="VoicePhone"/>
</Telephone>
</PatientInfo>
</PatientRxs>
</xsl:template>
И в итоге я получаю:
<PatientRxs>
<PatientInfo>
<FirstName>Matthew James</FirstName>
<Telephone>0111 222 33333</Telephone>
</PatientInfo>
</PatientRxs>
<PatientRxs>
<PatientInfo>
<FirstName>James Alan</FirstName>
<Telephone/>
</PatientInfo>
</PatientRxs>
Где я на самом деле хочу:
<PatientRxs>
<PatientInfo>
<FirstName>Matthew James</FirstName>
<Telephone>0111 222 33333</Telephone>
</PatientInfo>
</PatientRxs>
<PatientRxs>
<PatientInfo>
<FirstName>James Alan</FirstName>
</PatientInfo>
</PatientRxs>
Хотя я мог бы проверить, существует ли значение, это всего лишь 1 из сотен элементов, которые потенциально могут не существовать в исходном документе и хотели бы избежатьлист XSLT, проверяющий каждый из них