kein korrekter output eines speziellen tags xslt 1.0

- xsl
Hi,
wie kann ich mein XSLT richtigstellen, damit ich nur den wert des tags "NUMBER" unter folg. Vorraussetzungen erhalten: "GRP"/"ADD"/"QUALIFIER"(ST) und anschließend prüfen ob unter "contact" der "QUALIFIER" = "EM" vorhanden ist und den wert von "NUMBER" ausgeben:
so sollte es aussehen: <CONTACT_EMAIL>test@test.de</CONTACT_EMAIL>
<?xml version="1.0"?>
<TEST>
<CNT>
<GRP>
<ADD>
<QUALIFIER>DP</QUALIFIER>
<PARTY_NAME_1>Vorname Nachname</PARTY_NAME_1>
<STREET_1>Strasse 1</STREET_1>
<CITY>Ort</CITY>
<POSTAL_CODE>12345</POSTAL_CODE>
<COUNTRY_CODE>DE</COUNTRY_CODE>
<CONTACT>
<QUALIFIER>TE</QUALIFIER>
<NUMBER>4657</NUMBER>
</CONTACT>
<CONTACT>
<QUALIFIER>EM</QUALIFIER>
<NUMBER>test2@test.de</NUMBER>
</CONTACT>
</ADD>
<ADD>
<QUALIFIER>ST</QUALIFIER>
<PARTY_NAME_1>Vorname Nachname</PARTY_NAME_1>
<STREET_1>Strasse 1</STREET_1>
<CITY>Ort</CITY>
<POSTAL_CODE>12345</POSTAL_CODE>
<COUNTRY_CODE>DE</COUNTRY_CODE>
<CONTACT>
<QUALIFIER>TE</QUALIFIER>
<NUMBER>12345</NUMBER>
</CONTACT>
<CONTACT>
<QUALIFIER>EM</QUALIFIER>
<NUMBER>test@test.de</NUMBER>
</CONTACT>
</ADD>
</GRP>
</CNT>
</TEST>
Meine Idee (was jedoch nicht funktioniert):
<xsl:template match="GRP">
<xsl:copy>
<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>
<!--copy all other nodes -->
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
edit: ohne [QUALIFIER = 'ST'] unter for-each select erhalte ich leider beide werte (auch wo der qualifier unter add "DP" ist)
<xsl:template match="GRP">
<xsl:copy>
<xsl:for-each select ="./ADD/CONTACT">
<xsl:if test="./QUALIFIER='EM'">
<CONTACT_EMAIL>
<xsl:value-of select="NUMBER"/>
</CONTACT_EMAIL>
</xsl:if>
</xsl:for-each>
<!--copy all other nodes -->
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<CONTACT_EMAIL>test2@test.de</CONTACT_EMAIL> <CONTACT_EMAIL>test@test.de</CONTACT_EMAIL>
Vielen Dank
LG Julian
Tach!
wie kann ich mein XSLT richtigstellen, damit ich nur den wert des tags "NUMBER" unter folg. Vorraussetzungen erhalten: "GRP"/"ADD"/"QUALIFIER"(ST) [...]
Wenn das ADD ein bestimmtes Kindelement haben muss, musst der XPath das auch so angeben.
<xsl:for-each select ="./ADD/CONTACT[QUALIFIER='ST']">
Hier prüfst du auf Kinder von CONTACT nicht von ADD.
und anschließend prüfen ob unter "contact" der "QUALIFIER" = "EM" vorhanden ist und den wert von "NUMBER" ausgeben:
so sollte es aussehen: <CONTACT_EMAIL>test@test.de</CONTACT_EMAIL>
Ja, wenn man den XPath korrekt ausgehend von ADD wählt.
Also, für jedes ./ADD[QUALIFIER='ST']
testen ob ./CONTACT/QUALIFIER='EM'
(wobei der Test wegfallen kann, wenn immer solch ein Element vorhanden ist) und dann den Wert von CONTACT[QUALIFIER='EM']/NUMBER
wählen.
dedlfix.
danke danke danke für die hilfe und ausführliche erklärung!! 😀