xsl-list
[Top] [All Lists]

use preceding element or self

2005-04-28 08:05:29
Hi, 

Hi,
I got this XML and want to fill an element "kundenkategorie" with the 
capitalized word of par[(_at_)class='Komm_H3'] for each Norm1.

If there is no capitalized word, it should take the one of the preceding 
<Norm1>. 
If there is a new one it should, take this one. Couldn't figure it out how to 
do it.


<root>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/1</hidden>
                        </par>
                        <par class="Komm_H2" 
xml:lang="de">Verfassungswidrigkeit der Unfallrentenbesteuerung</par>
                        <par class="Komm_H3" 
xml:lang="de">EINKOMMENSTEUER<linebreak/>
                                <inline class="*Paragraph">§ 3 Abs 1 Z 4 lit 
c</inline>
                                <inline class="*hidden"> EStG</inline>, <inline 
class="*Paragraph">§ 25 Abs 1 Z 1 lit c EStG</inline>
                        </par>
                </part>
        </Norm1>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo2003/2</hidden>
                        </par>
                        <par class="Komm_H2" xml:lang="de">Verordnung über die 
Kriterien zur Festlegung förderbarer Forschungs- und Entwicklungsaufwendungen 
(-ausgaben)</par>
                        <par class="Komm_H3" xml:lang="de">
                                <inline class="*Paragraph">§ 4 Abs 4 Z 
4a</inline>
                                <inline class="*hidden"> EStG</inline>, <inline 
class="*Paragraph">§ 108c Abs 2 Z 1 EStG</inline>
                        </par>
                        <par class="Komm_normal" xml:lang="de">
                                <inline class="*fett">BGBl II 2002/506, 
ausgegeben am 20. 12. 2002</inline>
                        </par>
                </part>
        </Norm1>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/3</hidden>
                        </par>
                        <par class="Komm_H2" 
xml:lang="de">Forschungsförderungsbeiträge nicht Teil der Bemessungsgrundlage 
des Forschungsfreibetrages</par>
                        <par class="Komm_H3" xml:lang="de">
                                <inline class="*Paragraph">§ 4 Abs 4 Z 
4</inline>
                                <inline class="*hidden"> EStG</inline>, <inline 
class="*Paragraph">§ 20 Abs 2 EStG</inline>
                        </par>
                </part>
        </Norm1>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/4</hidden>
                        </par>
                        <par class="Komm_H2" 
xml:lang="de">Steuerberatungskosten eines Landwirtes bei Gewinnermittlung nach 
Durchschnittssätzen</par>
                        <par class="Komm_H3" xml:lang="de">
                                <inline class="*Paragraph">§ 17</inline>
                                <inline class="*hidden"> EStG</inline>, <inline 
class="*Paragraph">§ 18 Abs 1 Z 6 EStG</inline>
                        </par>
                </part>
        </Norm1>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/5</hidden>
                        </par>
                        <par class="Komm_H2" 
xml:lang="de">Verfassungswidrigkeit der Leibrentenbewertung</par>
                        <par class="Komm_H3" xml:lang="de">
                                <inline class="*Paragraph">§ 29 Z 1 
EStG</inline>, <inline class="*Paragraph">§ 16 Abs 2 BewG</inline>
                        </par>
                </part>
        </Norm1>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/6</hidden>
                        </par>
                        <par class="Komm_H2" xml:lang="de">Änderungen der 
Umsatzsteuerrichtlinien - Rechnungslegung aufgrund des 2. 
Abgabenänderungsgesetzes 2002</par>
                        <par class="Komm_H3" xml:lang="de">UMSATZSTEUER</par>
                        <par class="Komm_normal" xml:lang="de">
                                <inline class="*fett">BMF 18. 12. 2002</inline>
                        </par>
                </part>
        </Norm1>
<Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/5</hidden>
                        </par>
                        <par class="Komm_H2" 
xml:lang="de">Verfassungswidrigkeit der Leibrentenbewertung</par>
                        <par class="Komm_H3" xml:lang="de">
                                <inline class="*Paragraph">§ 29 Z 1 
EStG</inline>, <inline class="*Paragraph">§ 16 Abs 2 BewG</inline>
                        </par>
                </part>
        </Norm1>
        <Norm1>
                <part>
                        <kategorie>Heft 1/2003</kategorie>
                        <par class="Ref" xml:lang="de">
                                <hidden>StInfo 2003/7</hidden>
                        </par>
                        <par class="Komm_H2" xml:lang="de">Verordnung 
betreffend die Vermeidung von Doppelbesteuerung</par>
                        <par class="Komm_H3" xml:lang="de">BAO, 
DOPPELBESTEUERUNG</par>
                </part>
        </Norm1>
</root>

My 
Template:
<xsl:template match="Norm1[not(position()=1)]/part">
                <part>
                        <kundenkategorie>
                                
                                                <xsl:choose>

                                                        <xsl:when 
test="count(parent::node()/preceding-sibling::Norm1) &lt; 2 or 
string-length(par[(_at_)class='Komm_H2']/following-sibling::par[1][(_at_)class='Komm_H3']/node()[1][self::text()])
8">
                                                                <xsl:value-of 
select="par[(_at_)class='Komm_H3']/text()[1]"/>
                                                        </xsl:when>
                                                        <xsl:otherwise>
                                                                <xsl:value-of 
select="preceding::par[(_at_)class='Komm_H3'][string-length(normalize-space(text()[1]))
8][1]/text()[1]"/>
                                                        </xsl:otherwise>
                                                </xsl:choose>
                                                
                                        
                        </kundenkategorie>
                        <xsl:copy-of select="*"/>
                </part>

<Prev in Thread] Current Thread [Next in Thread>