XML mit XSL umwandeln
Tobias Denner
- xsl
0 Thomas J.S.0 Tobias Denner0 Thomas J.S.0 Tobias Denner0 Thomas J.S.0 Tobias Denner0 Thomas J.S.1 MudGuard
Hier mein Problem:
ICh habe von einem Programm (nennen wir es Lexware) eine XML Datei bekommen.
Jetzt habe ich das Problem, dass ich diese in eine CSV umwandeln muss.
Ich wandle also die Zeile
<DESCRIPTION_SHORT>Bmein kleiner Text</DESCRIPTION_SHORT>
mit <xsl:value-of select="DESCRIPTION_SHORT"/> um. Soweit klar.
Aber wie lese ich aus
je den fvalue für "1.000", den für "test csv" und den für "beschreibung" aus?
mit <xsl:value-of select="ARTICLE_FEATURES/FEATURE/FVALUE"/> steht ja nicht fest welches von den dreien gemeint ist.
und die XML kann ich leider nicht ändern....
Hallo,
Jetzt habe ich das Problem, dass ich diese in eine CSV umwandeln muss.
Aber wie lese ich aus
je den fvalue für "1.000", den für "test csv" und den für "beschreibung" aus?
mit <xsl:value-of select="ARTICLE_FEATURES/FEATURE/FVALUE"/> steht ja nicht fest welches von den dreien gemeint ist.
<xsl:value-of select="ARTICLE_FEATURES/FEATURE[FNAME = 'Gewicht']/FVALUE"/> = 1.0...
<xsl:value-of select="ARTICLE_FEATURES/FEATURE[FNAME = 'artikelnr']/FVALUE"/>
Usw.
Grüße
Thomas
OK.. Ich komme trotzdem nicht weiter. Hier meine XML:
-----------------------------------------------------------
<?xml version="1.0" encoding="iso-8859-1" ?>
------------------------------------------------------------------
Hier meine XLS mit zwei Beispielen:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="T_NEW_CATALOG"/>
</xsl:template>
<xsl:template match="T_NEW_CATALOG">
<xsl:value-of select="ARTICLE/ARTICLE_FEATURES/FEATURE[FNAME = 'artikelnr']/FVALUE"/>;
<xsl:value-of select="ARTICLE/ARTICLE_DETAILS/DESCRIPTION_LONG"/>;
xsl:text
</xsl:text>
</xsl:template>
</xsl:stylesheet>
-------------------------------------------------------------------
Das Resultat ist eine leere CSV. Der Fehler müsste im template select und template match liegen. Aber ich finde Ihn nicht.
Hallo,
OK.. Ich komme trotzdem nicht weiter. Hier meine XML:
Hier meine XLS mit zwei Beispielen:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:apply-templates select="T_NEW_CATALOG"/>
^^^^^^^^^^^^^^^^
Das Resultat ist eine leere CSV. Der Fehler müsste im template select und template match liegen. Aber ich finde Ihn nicht.
Es gibt in deinem XML aber keinen Element "T_NEW_CATALOG"! Da kann auch nichts selektiert werden.
Grüße
Thomas
Wie müsste dann das Script lauten um z.B.
<FNAME>artikelnr</FNAME>
<FVALUE>test csv</FVALUE>
auszulesen? (also des wert test csv)
Ich finde im Internet keine andere Möglichkeit die XML zum CSV kompatibel zu machen. Müsste also aus der XML die nötigen Werte auslesen.
Für eine kurze Hilfe wäre ich wirklich dankbar!
Hallo,
Wie müsste dann das Script lauten um z.B.
<FNAME>artikelnr</FNAME>
<FVALUE>test csv</FVALUE>
auszulesen? (also des wert test csv)Ich finde im Internet keine andere Möglichkeit die XML zum CSV kompatibel zu machen. Müsste also aus der XML die nötigen Werte auslesen.
Zwei Dinge muss du berücksichtigen:
-----------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:bm="http://www.bmecat.org/bmecat/1.2/bmecat_new_catalog" exclude-result-prefixes="bm">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:apply-templates select="bm:BMECAT/bm:T_NEW_CATALOG" />
</xsl:template>
<xsl:template match="bm:T_NEW_CATALOG">
<xsl:value-of select="bm:ARTICLE/bm:ARTICLE_FEATURES/bm:FEATURE[bm:FNAME = 'artikelnr']/bm:FVALUE" />;
<xsl:value-of select="bm:ARTICLE/bm:ARTICLE_DETAILS/bm:DESCRIPTION_LONG" />;
xsl:text
</xsl:text>
</xsl:template>
</xsl:stylesheet>
---------
Du kannst statt dem Prefix "bm" irgendwas nehmen, "x" "foo", "bar", "blabla", es ist egal, nur musst du deine Elemente dann im XSL _immer_ mit diesem Prefix schreiben. Wenn du mal keine Ausgabe wie erwartet bekommst, überprüfe zuerst ob du nicht irgendwo ein Prefix vergessen hast.
Grüße
Thomas
Danke.. Jetzt gehts. Jetzt muss ich mich nur noch drum kümmern, warum die Namen mit einem Viereck nach dem Import der CSV erscheinen...
Also immer ein Buchstabe, dann ein Viereck
Sonst vielen Dank!!
Hallo,
Danke.. Jetzt gehts. Jetzt muss ich mich nur noch drum kümmern, warum die Namen mit einem Viereck nach dem Import der CSV erscheinen...
Also immer ein Buchstabe, dann ein Viereck
Da wird offensichtlich ein Zeichen verwendet für das in der Schriftart, die du für die Anzeige nimmst, keine entsprechende Glyphe (also Bildzeichen) vorhanden ist.
Grüße
Thomas
Hi,
Also immer ein Buchstabe, dann ein Viereck
Ist das Output-Encoding zufällig UTF-16 und die Vierecke sind die 0-Bytes, die Deine Software darstellt, weil sie das UTF-16 nicht erkennt?
cu,
Andreas