Portál AbcLinuxu, 29. října 2025 08:08
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.