Transformace XML pomocí XSL do SVG cesty

Sheldonizátor

Transformace XML pomocí XSL do SVG cesty
« kdy: 25. 09. 2015, 17:58:49 »
Ahoj, potřeboval bych poradit s takovou maličkostí, mějme XML s nějakým seznamem bodů, potřebuji XSL šablonu která ty body nějak sezbírá a uloží je do atributu polyline při generování SVG.

Kód: [Vybrat]
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="body_objektu.xsl" type="text/xsl"?>
<body_objektu pocet="4">
  <bod x="0" y="0"/>
  <bod x="100" y="0"/>
  <bod x="100" y="100"/>
  <bod x="0" y="100"/>
</body_objektu>

No a chci aby z toho vylezlo něco takového:
Kód: [Vybrat]
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <polyline points="0,0  100,0  100,100 0,100" style="stroke:#006600;"/>
</svg>

Problém je, že nevím jak v XSL vygenerovat atribut points, kdyby to byl seznam hodnot po řádcích tak by to šlo, ale do atributu umím nacpat jenom hodnotu z aktuálního node, nikoliv nějaký string vygenerovaný z jeho potomků.
« Poslední změna: 25. 09. 2015, 23:27:51 od Petr Krčmář »


Filip Jirsák nepřihlášený

Re:Transformace XML pomocí XSL do SVG cesty.
« Odpověď #1 kdy: 25. 09. 2015, 19:08:49 »
Atribut vytvoříte pomocí <xsl:attribute>. Jeho obsah se vloží jako obsah atributu. Takže zkuste

Kód: [Vybrat]
<xsl:attribute>
   <xsl:for-each ...>
   </xsl:for-each>
</xsl:attribute>

nebo

Kód: [Vybrat]
<xsl:attribute>
   <xsl:apply-templates .../>
</xsl:attribute>

Kit

Re:Transformace XML pomocí XSL do SVG cesty.
« Odpověď #2 kdy: 25. 09. 2015, 21:05:50 »
Kód: [Vybrat]
<xsl:template match="/body_objektu">
    <svg>
        <polyline style="stroke:#006600;">
            <xsl:attribute name="points">
                <xsl:for-each select="bod">
                    <xsl:value-of select="@x"/>,<xsl:value-of select="@y"/>
                    <xsl:text> </xsl:text>
                </xsl:for-each>
            </xsl:attribute>
        </polyline>
    </svg>
</xsl:template>