XSL Taginhalt abfragen mit if und dann anderen Tag-Inhalt ausgeben

Clause

Grünschnabel
Versuche gerade eine xml per XSL umzuformatieren.

Die Struktur der der XML ist aus Wordpress ist von oben so:

-------
rss
- channel
- title
...
- item (Je Artikel)
....
- postmeta (Benutzerdefinierte Felder)
- meta_key (Name des Benutzerdefinierten Feldes)
- meta_value (Inhalt des Benutzerdefinerten Feldes)
sehr viele postmetas ...
- item
...

------------

Was ich jetzt vor habe, das ich jeden Artikel als extra xml Tag habe und das die vielen Benutzerdefinierten Felder (postmeta) in Benutzerdefinierte Tags gewandelt werden.

Was ich jetzt versucht habe war folgendes:
PHP:
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version = "2.0"
xmlns:n1="http://www.w3.org"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
	xmlns:excerpt="http://wordpress.org/export/1.1/excerpt/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:wp="http://wordpress.org/export/1.1/"
	xmlns:pubDate="Wed, 02 Dec 2009 22:58:22 +0000">

<xsl:output method="xml" version="1.0" encoding = "UTF-8" indent="yes"/>
<xsl:template match="/">
	<xsl:element name = "root">
<xsl:apply-templates select="rss/channel/item"/></xsl:element>
</xsl:template>


<xsl:template match="item">

 <xsl:element name = "Artikel">
  <xsl:element name = "vs">
	<xsl:element name = "titel"><xsl:value-of select="title"/></xsl:element>
  	<xsl:element name = "test"><xsl:value-of select="category"/></xsl:element>

	<xsl:for-each select="postmeta">
		<xsl:element name = "benutzerdef1"><xsl:if test="postmeta/meta_key/@text()='benutzerdef1'"><xsl:value-of select="postmeta/meta_value/text()"/></xsl:if></xsl:element>
		<xsl:element name = "benutzerdef2"><xsl:if test="postmeta/meta_key/@text()='benutzerdef2'"><xsl:value-of select="postmeta/meta_value/text()"/></xsl:if></xsl:element>
	</xsl:for-each>

 	</xsl:element>

  </xsl:element>	
			
</xsl:template>
</xsl:stylesheet>>

Aber sobald ich die "for-each" Schleife drin hab möchte er nicht mehr...

Wo liegt da mein Fehler?
Hat mir jemand einen Tip?
Er muss jetzt eigentlich im Feld metakey schauen, ob da "Benutzerdef1" drin steht, wenn ja, dann gib das jeweilige Feld aus...
Wie würdet Ihr das machen?


Ich will von
PHP:
<wp:postmeta>
            <wp:meta_key>Benuterdefiniert1</wp:meta_key>
            <wp:meta_value>In Wordpress defineirter Wert</wp:meta_value>
        </wp:postmeta>

zu diesem kommen
PHP:
<Benuterdefiniert1>In Wordpress defineirter Wert</Benuterdefiniert1>
 
Zuletzt bearbeitet:
OK, ich habe nach einigem rumprobieren eine Lösung gefunden.

PHP:
<!-- Zuerst habe ich eine Variable definiert mit dem Abzufragenden Ergebnis -->
<xsl:variable name="WasSuchen" select="'BenutzerdefiniertesFeld1'" />

<!-- Dann eine Schleife um das "wp:postmeta" -->
<xsl:for-each select="wp:postmeta">
<xsl:if test="$WasSuchen = wp:meta_key/text()">
<xsl:element name = "BenutzerdefiniertesFeld1">
<xsl:value-of select="wp:meta_value/text()"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
 
Zurück