Portál AbcLinuxu, 5. května 2025 13:09
Mám XML, ze kterýho chci něco soukat do db a jednotlivý položky jsou jako atributy elementu, tj něco jako
<KAT KATEGORIE="10" KAT_SPEC="0"/>
A z toho chci mít
INSERT INTO KAT (KATEGORIE, KAT SPEC) VALUES (10, 0);
Problém mě dělají ty čárky mezi tim. Z jednotlivejch elementů udělat cooma separated list, to umim (vygůglovat), ale udělat ho z atributů ne
Řešení dotazu:
<xsl:for-each select="KAT/@*"> <xsl:value-of select="name(.)"/> <xsl:value-of select="."/> </xsl:for-each>
<root> <kat kategorie="10" kat_spec="1"/> <kat kategorie="12" kat_spec="4"/> <zbozi nazev="Kalhoty" cena="800"/> <zbozi nazev="Košile" cena="300"/> </root>Šablona:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output method="text" encoding="UTF-8"/> <xsl:template match="/root"> <xsl:for-each select="*">INSERT INTO <xsl:value-of select="name(.)"/> (<xsl:for-each select="@*"> <xsl:if test="position() != 1">, </xsl:if> <xsl:value-of select="name(.)"/></xsl:for-each>) VALUES (<xsl:for-each select="@*"> <xsl:if test="position() != 1">, </xsl:if>'<xsl:value-of select="."/>'</xsl:for-each>);<xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>Výstup:
INSERT INTO kat (kategorie, kat_spec) VALUES ('10', '1'); INSERT INTO kat (kategorie, kat_spec) VALUES ('12', '4'); INSERT INTO zbozi (nazev, cena) VALUES ('Kalhoty', '800'); INSERT INTO zbozi (nazev, cena) VALUES ('Košile', '300');Pozor, nemám v tom ošetřeny speciální znaky.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.