Hallo.
Wie das Topic schon sagt habe ich vor, in einem Strukturbaum, rekursiv nach oben zu laufen und verschiedene Bedingungen zu überprüfen.
In der XML Datei wird ein Kunde dargestellt, der teilweise 1:1 Attribute hat, wie zB eine KundenID, auf der anderen Seite aber auch 1:N Attribute, wie zB Adressen. Die Funktionalität soll garantieren, dass ich mich bei den 1:N Attributen im richtigen Teilbaum befinde und nicht Attribute aus einem anderen Teilbaum gezogen werden. Das XML ist leider ziemlich unübersichtlich, deswegen teilweise sehr komische Abfragen..
XML:
XSLT:
Mein Problem ist nun, dass bei der Abfrage: <xsl:when test="./PARENT_NODE_ID"> niemals in den darunter liegenden Code gesprungen wird, selbst wenn die PARENT_NODE_ID vorhanden ist. Ein Debuggen war leider nicht möglich, da die Breakpoints in der xsl:choose einfach übersprungen wurden, obwohl es eindeutig ausgelöst wurde.
Wenn einem irgend etwas an diesem Codefragment spanisch vorkommt, dann bitte melden!
Danke schonmal im Vorraus für eure Antworten!
Gruß,
Engel
Wie das Topic schon sagt habe ich vor, in einem Strukturbaum, rekursiv nach oben zu laufen und verschiedene Bedingungen zu überprüfen.
In der XML Datei wird ein Kunde dargestellt, der teilweise 1:1 Attribute hat, wie zB eine KundenID, auf der anderen Seite aber auch 1:N Attribute, wie zB Adressen. Die Funktionalität soll garantieren, dass ich mich bei den 1:N Attributen im richtigen Teilbaum befinde und nicht Attribute aus einem anderen Teilbaum gezogen werden. Das XML ist leider ziemlich unübersichtlich, deswegen teilweise sehr komische Abfragen..
XML:
Code:
<cls:IF_ADDRP_ADDRESS.TY_POSTAL_ADDRESS id="d3019"> <NODE_ID>AVLOCGEN100145EF588EC02DC87F3933664B60E0D</NODE_ID> <PARENT_NODE_ID>ADGEN100145EF588EC02DC87F3933664B60E0D</PARENT_NODE_ID> <CONTROLLER/> <ADDRESS_REPRESENTATION_CODE> <CONTROLLER/> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT/> </ADDRESS_REPRESENTATION_CODE> <COUNTRY_CODE>DE</COUNTRY_CODE> <REGION_CODE> <CONTROLLER/> <LIST_ID>DE</LIST_ID> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT>11</CONTENT> </REGION_CODE> <COUNTY_NAME/> <CITY_NAME>Maincity</CITY_NAME> <ADDITIONAL_CITY_NAME/> <DISTRICT_NAME/> <STREET_POSTAL_CODE>55555</STREET_POSTAL_CODE> <POBOX_POSTAL_CODE/> <COMPANY_POSTAL_CODE/> <STREET_PREFIX_NAME/> <ADDITIONAL_STREET_PREFIX_NAME/> <STREET_NAME>Mainstreet</STREET_NAME> <STREET_SUFFIX_NAME/> <ADDITIONAL_STREET_SUFFIX_NAME/> <HOUSE_ID>10</HOUSE_ID> <ADDITIONAL_HOUSE_ID/> <BUILDING_ID/> <ROOM_ID/> <FLOOR_ID/> <CARE_OF_NAME/> <STREET_ADDR_MAIL_NO_DELI_CODE> <CONTROLLER/> <LIST_ID/> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT/> </STREET_ADDR_MAIL_NO_DELI_CODE> <REG_STRUC_ELEMENT_GROUP_CODE> <CONTROLLER/> <LIST_ID/> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT/> </REG_STRUC_ELEMENT_GROUP_CODE> <POBOX_DEVIATING_COUNTRY_CODE/> <POBOX_DEVIATING_REGION_CODE> <CONTROLLER/> <LIST_ID>DE</LIST_ID> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT/> </POBOX_DEVIATING_REGION_CODE> <POBOX_DEVIATING_CITY_NAME/> <POBOX_ID/> <POBOX_INDICATOR>false</POBOX_INDICATOR> <POBOX_ADDR_MAIL_NO_DELI_CODE> <CONTROLLER/> <LIST_ID/> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT/> </POBOX_ADDR_MAIL_NO_DELI_CODE> <TAX_JURISDICTION_CODE> <CONTROLLER/> <LIST_ID>DE</LIST_ID> <LIST_VERSION_ID/> <LIST_AGENCY_ID/> <LIST_AGENCY_SCHEME_ID/> <LIST_AGENCY_SCHEME_AGENCY_ID/> <CONTENT/> </TAX_JURISDICTION_CODE> <TIME_ZONE_CODE>CET</TIME_ZONE_CODE> </cls:IF_ADDRP_ADDRESS.TY_POSTAL_ADDRESS>
Code:
<!-- Template zur rekursiven Suche des richtigen Knoten --> <xsl:template name="searchParent"> <xsl:param name="dataRef"/> <xsl:param name="count">0</xsl:param> <xsl:choose> <xsl:when test="./PARENT_NODE_ID"> <xsl:variable name="parID"><xsl:value-of select="./PARENT_NODE_ID"/></xsl:variable> <xsl:for-each select="//NODE_ID[ancestor::asx:heap]"> <xsl:variable name="tmpID"><xsl:value-of select="./NODE_ID"/></xsl:variable> <xsl:if test="$tmpID = $parID"> <xsl:variable name="tmpRef"><xsl:value-of select="node()/@id"/></xsl:variable> <xsl:choose> <xsl:when test="$tmpRef = $dataRef"> <xsl:value-of select="'1'"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="searchParent"> <xsl:with-param name="dataRef" select="$dataRef"/> <xsl:with-param name="count" select="$count + 1"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="$count = '0'"> <xsl:value-of select="'1'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="'0'"/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template>
Wenn einem irgend etwas an diesem Codefragment spanisch vorkommt, dann bitte melden!
Danke schonmal im Vorraus für eure Antworten!
Gruß,
Engel
Comment