Thomas J.S.: Mehrfach-Strukturierung eines flachen Dokuments

Beitrag lesen

Hallo,

Meine Fragen sind daher:

  1. Geht das nicht einfacher? Anstatt erst die Absätze vor und dann nach Listen auszuschließen - geht es nicht, dass man sagen kann: Alle Elemente namens listelement bzw. listelement_ol zusammenfassen/gruppieren? Leider hatte ich immer das Problem, dass ich die Knoten davor und danach (genauer die Absätze) mittels apply-templates oder current-group() nicht ausgeben konnte (Denn: es können ja auch mehrere Listen zwischen zwei heading2 Elementen vorkommen).

  2. Ich habe für die Funktionen group-starting-with und group-ending-with jeweils händisch das Attribut @last und @first für listelement bzw. listelement_ol hinzugefügt - um die Gruppierung durchzuführen.
      Wie kann man nun den XPath formulieren ohne diese Attribute? Ich möchte ja immer das erste Listenelement auswählen, welches als DIREKTEN Vorgänger ein Absatz para hat bzw. für @last umgekehrt (jeweils der akutellen Gruppe). Aber die Formulierungen:
    listelement[psoition()=1 and preceding-sibling::para] nützt hier irgendwie nicht viel.

Ich hoffe, jemand kann mir die Fragen bzw. eine der Fragen beantworten. Gerade das zweite Problem bringt mich ein wenig zur Verzweiflung.

Im Wesentlichen gibt es nur zwei kleinere Vereinfachungsmöglichkeiten:

<xsl:template name="struktur">  
		<xsl:for-each-group select="root/heading1/following-sibling::*" group-starting-with="heading2"
~~~>  
  
  
2) um @last und @first weglassen zu können:  
  
~~~xml
		<xsl:for-each-group select="current-group()" group-starting-with="listelement[preceding-sibling::*[1][not(local-name() = 'listelement')]] | listelement_ol[preceding-sibling::*[1][not(local-name() = 'listelement_ol')]]">  
			<xsl:choose>  
				<xsl:when test="current()[self::listelement|self::listelement_ol]">  
					<xsl:for-each-group select="current-group()" group-ending-with="listelement[following-sibling::*[1][not(local-name() = 'listelement')]] | listelement_ol[following-sibling::*[1][not(local-name() = 'listelement_ol')]]">  
						<xsl:choose>

Grüße
Thomas