XSL, отображающий значения данных операции
У меня есть следующий документ, который входит в политику NetIQ IDM:
<nds dtdversion="4.0" ndsversion="8.x">
<source>
<product edition="Advanced" version="4.6.2.0">DirXML</product>
<contact>NetIQ Corporation</contact>
</source>
<output>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope">
<soap-env:Body>
<status dest-dn="" event-id="0" level="success">
<application>DirXML</application>
<module>wdStudio</module>
<object-dn>\IAMT-WD-VAULT\OSU\vault\users\IDM800159</object-dn>
<component>Publisher</component>
<operation-data op-email_id="bruce.wayne@batcave.com" op-employee_id="100000021" op-idm_id="IDM800159" op-med_ctr_id="" op-nameN="wayne.206"/>
</status>I am here</soap-env:Body>
</soap-env:Envelope>
</output>
</nds>
Я хочу извлечь значения данных операции, чтобы они были частью кода и выглядели следующим образом:
<op-email_id>bruce.wayne@batcave.com</op-email_id>
<op-employee_id>100000021</op-employee_id>
<op-idm_id>IDM800159</op-idm_id>
<op-nameN>wayne.206</op-nameN>
Обратите внимание, что поскольку op-med_ctr_id является пустым / пустым / пустым, он не будет добавлен. Конечная цель - добавить это как часть ответа драйвера SOAP в netIQ.
1 ответ
Одна возможность достичь этого - просто обернуть каждый xsl:value-of
в xsl:if
, Это может быть достигнуто с помощью шаблонов, если хотите.
<xsl:template match="/nds/output/soap-env:Envelope/soap-env:Body/status/operation-data">
<xsl:if test="normalize-space(@op-email_id)">
<op-email_id><xsl:value-of select="@op-email_id" /></op-email_id>
</xsl:if>
<xsl:if test="normalize-space(@op-employee_id)">
<op-employee_id><xsl:value-of select="@op-employee_id" /></op-employee_id>
</xsl:if>
<xsl:if test="normalize-space(@op-idm_id)">
<op-idm_id><xsl:value-of select="@op-idm_id" /></op-idm_id>
</xsl:if>
<xsl:if test="normalize-space(@op-med_ctr)">
<op-med_ctr_id><xsl:value-of select="@op-med_ctr_id" /></op-med_ctr_id>
</xsl:if>
<xsl:if test="normalize-space(@op-nameN)">
<op-nameN><xsl:value-of select="@op-nameN" /></op-nameN>
</xsl:if>
</xsl:template>