juls_pro_37: kein korrekter output eines speziellen tags xslt 1.0

Beitrag lesen

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