У вас в XSLT дважды есть шаблон идентификации (<xsl:template match="@* | node()">
), вы можете удалить второй.
При этом ваша логика выглядит следующим образом
<xsl:for-each select ="./ADD/CONTACT[QUALIFIER='ST']">
<xsl:if test="./QUALIFIER='EM'">
<CONTACT_EMAIL>
<xsl:value-of select="NUMBER"/>
</CONTACT_EMAIL>
</xsl:if>
</xsl:for-each>
Этоне может работатьСудя по вашему примеру XML, не может быть <CONTACT>
с квалификатором, равным ST
, который также имеет квалификатор, равный EM
.
Вы, вероятно, имеете в виду это:
<xsl:for-each select ="ADD/CONTACT[QUALIFIER='EM']">
<CONTACT_EMAIL>
<xsl:value-of select="NUMBER"/>
</CONTACT_EMAIL>
</xsl:for-each>
Примечания
- Я не уверен, что ваш вызов "копировать все остальные узлы" в
<xsl:apply-templates select="@* | node()" />
- это то, что вам нужно.Я бы сказал, что это не так. - Запись
./
избыточна в XPath.Каждый путь, который не начинается в корне документа, по умолчанию относится к текущему узлу по умолчанию.