AW: [xsl] use preceding element or self

Subject: AW: [xsl] use preceding element or self
From: "Klocker Christoph" <Christoph.Klocker@xxxxxxxxxxxxx>
Date: Fri, 29 Apr 2005 12:52:43 +0200
Does xmlspy do xpath2?

yes, it has an xpath2 evaluator.

Also you've dropped (.| from the beginning of the expression so uou are
just testing preceding siblings, not the current node, in which case you
can more simply write

had a choose to check this, quite nicer your version with (.|

> Seems to be a Saxon issue.

Hmm 99 times out of 100 I'd believe saxon (especially if 8.4 gives the
same result) Can you make a smaller example (6 or 7 line) and a small
complete stylesheet that does the wrong thing? and post the input and
output you get?

Switched to 8.4 now. Seems it works partly now at least.
Have a look at my output: for the last two it seems to work, not for the first
two however.

Output:

<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xs="http://www.w3.org/2001/XMLSchema";>
	<part>
		<kundenkategorie>EINKOMMENSTEUER
				' 3 Abs 1 Z 4 lit c
				 EStG, ' 25 Abs 1 Z 1 lit c EStG
			</kundenkategorie>
		<kategorie>Heft 1/2003</kategorie>
		<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>
	<part>
		<kundenkategorie>EINKOMMENSTEUER
				' 3 Abs 1 Z 4 lit c
				 EStG, ' 25 Abs 1 Z 1 lit c EStG
			</kundenkategorie>
		<kategorie>Heft 1/2003</kategorie>
		<par class="Komm_H2" xml:lang="de">Verordnung |ber die Kriterien zur
Festlegung fvrderbarer 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>
	<part>
		<kundenkategorie>UMSATZSTEUER</kundenkategorie>
		<kategorie>Heft 1/2003</kategorie>
		<par class="Komm_H2" xml:lang="de">Dnderungen der Umsatzsteuerrichtlinien -
Rechnungslegung aufgrund des 2. Abgabendnderungsgesetzes 2002</par>
		<par class="Komm_H3" xml:lang="de">UMSATZSTEUER</par>
	</part>
	<part>
		<kundenkategorie>UMSATZSTEUER</kundenkategorie>
		<kategorie>Heft 03/2004</kategorie>
		<par class="Komm_H2" xml:lang="de">Keine Geschdftsf|hrerhaftung bei
fehlender Entscheidung |ber einen \berrechnungsantrag</par>
		<par class="Komm_H3" xml:lang="de">
			<inline xml:lang="en">BAO<linebreak/>
			</inline>
			<inline class="*Paragraph" xml:lang="en">' 9</inline>
		</par>
	</part>
</test>

Input:
<?xml version="1.0" encoding="UTF-8"?>
<root>
	<Norm1>
		<part>
			<kategorie>Heft 1/2003</kategorie>
			<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="Komm_H2" xml:lang="de">Verordnung |ber die Kriterien zur
Festlegung fvrderbarer 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="Komm_H2" xml:lang="de">Dnderungen der Umsatzsteuerrichtlinien -
Rechnungslegung aufgrund des 2. Abgabendnderungsgesetzes 2002</par>
			<par class="Komm_H3" xml:lang="de">UMSATZSTEUER</par>
		</part>
	</Norm1>
	<Norm1>
		<part>
			<kategorie>Heft 03/2004</kategorie>
			<par class="Komm_H2" xml:lang="de">Keine Geschdftsf|hrerhaftung bei
fehlender Entscheidung |ber einen \berrechnungsantrag</par>
			<par class="Komm_H3" xml:lang="de">
				<inline xml:lang="en">BAO<linebreak/>
				</inline>
				<inline class="*Paragraph" xml:lang="en">' 9</inline>
			</par>
		</part>
	</Norm1>
</root>


Xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
		<test>
			<xsl:apply-templates/>
		</test>
	</xsl:template>
	<xsl:template match="Norm1/part">
		<part>
			<kundenkategorie>
				<xsl:value-of select="(par[@class='Komm_H3']
|preceding::par[@class='Komm_H3'])[text()[1][normalize-space()]][not(contains
(text()[1],','))][last()]"/>
			</kundenkategorie>
			<xsl:copy-of select="*"/>
		</part>
	</xsl:template>
</xsl:stylesheet>

Hope this helps

Current Thread