Если вы пытаетесь установить эти переменные со значениями telecom/@value
, которые содержат "tel" и "mailto", то вы не хотите использовать xsl:for-each
.Назначение переменной внутри xsl:for-each
будет означать, что они сразу же выйдут из области видимости на следующей итерации цикла for.
Вы можете применить предикат, чтобы выбрать telecom/@value
, который соответствует критерию, содержащемуся в нем, и выбрать его значение:
<xsl:variable name="Telecom" select="ClinicalDocument/recordTarget/patientRole/telecom/@value"/>
<xsl:variable name="PtPhoneNumber" select="$Telecom[contains(., 'tel')]"/>
<xsl:variable name="PtEmail" select="$Telecom[contains(., 'mailto')]"/>
В ваших данных выборки был только один из каждого.Если произошло более одного значения "tel" или "mailto", вы можете выбрать первое, добавив другой предикат для выбора первого из этих совпадений:
<xsl:variable name="PtPhoneNumber" select="$Telecom[contains(., 'tel')][1]"/>
<xsl:variable name="PtEmail" select="$Telecom[contains(., 'mailto')][1]"/>