Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Sheldonizátor 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.
<?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:
<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ů.
-
Atribut vytvoříte pomocí <xsl:attribute>. Jeho obsah se vloží jako obsah atributu. Takže zkuste
<xsl:attribute>
<xsl:for-each ...>
</xsl:for-each>
</xsl:attribute>
nebo
<xsl:attribute>
<xsl:apply-templates .../>
</xsl:attribute>
-
<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>