XSLT: was (zum Geier) ist hier falsch?

berniebert

Grünschnabel
hallo zusammen,
vielleicht kann mich jemand drauf bringen, warum mein xsl stylesheet nicht das macht was es soll...

die xml datei:

Code:
<field>
      <name>index</name>
      <attributes>
        <attribute>
          <name>indexName</name>    
        </attribute>
        <attribute>
          <name>lemma</name>
        </attribute>
      </attributes>
  </field>

die xslt datei:

Code:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<xsl:for-each select="//attribute">
			<xsl:value-of select="parent/parent::name"/>
			<xsl:text>@</xsl:text>
			<xsl:value-of select="child::name"/>
			<xsl:text>
</xsl:text>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
der output soll sein:

Code:
index@indexName
index@lemma

im moment ist er aber nur:

Code:
@indexName
@lemma

was ist denn an dem xpath ausdruck falsch? :confused:

vielen dank! B
 
Hallo,

probier's mal so:
Code:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="/">
		<xsl:for-each select="//attribute">
			<xsl:value-of select="../../name"/>
			<xsl:text>@</xsl:text>
			<xsl:value-of select="child::name"/>
			<xsl:text>
</xsl:text>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
Achsen kann man nicht auf diese Weise verschachteln.

Grüße,
Matthias
 
Ja, so funktionierts, danke. das man Achsen nicht verschachteln kann war mir neu...

Aber es hat sich noch ein neues Problem aufgetan: Mein Output ist eine Textdatei. Ich möchte Zeilenubrüche darin erzeugen ( mit <xsl:text>
</xsl_text> ). Wenn ich mit XMLSpy die Output-Datei erzeuge, werden die Zeilenumbrüche korrekt angezeigt. Nachdem ich diese Datei dann aber als .txt gespeichert habe, sind keine Zeilenumbrüche mehr vorhanden, sondern nur noch "Kästchen-Symbole" an den jeweiligen Stellen.

Hat jemand auch noch dafür eine Erklärung? Ist das ein Zeichensatz Problem?

Vielen Dank! B
 
Hallo,

ich denke mal, dass du diese TXT-Datei im Notepad geöffnet hast. Was mir mal aufgefallen ist, dass Nodepad nicht alle Steuerzeichen für Zeilenumbrüche anzeigen kann. Da scheint es mehrere zu geben. Da Notepad die anzeigt, die man bei Notepad selbst macht, aber meistens nicht die, die in einem anderen Programm gemacht wurden.

Wenn du die Datei beispielsweise mit Wordpad öffnest, müssten die Zeilenumbrüche angezeigt werden.

MFG

zEriX
 
das man Achsen nicht verschachteln kann war mir neu...
Hat ja auch niemand behauptet (nur eben nicht auf diese Weise). Wenn du die ausführliche Schreibweise bevorzugst, dann würde der Ausdruck ../../name so aussehen: parent::node()/parent::node()/child::name. Dein Vorschlag parent/parent::name würde ausführlich dagegen zu child::parent/parent::name werden (auf Deutsch: selektiere alle <parent>-Kindelemente und davon das Elternelement <name>, falls vorhanden). Eine Achse foo muss immer gepaart mit einem Node Test auftreten (also foo::test), sonst wird es als child::foo interpretiert.

Grüße,
Matthias
 

Neue Beiträge

Zurück