Dobrý den,
v XSLT jsem začátečník.
Dají se nějak pomocí XSLT do sebe zanořovat značky?
Něco takového.
vstupní xml:
<x></x>
<y></y>
vystupní xml:
<x>
<y>
</y>
</x>
Díky
Samozřejmě, že jde. Vstupní XML by mělo být správně tj. s jedním kořenovým tagem, takže třeba něco takového:
<i attr='i'>
<x attr='x'>
</x>
<y attr='y'>
</y>
</i>
Vyjdeme z obecné kopírky (neboli z transformace shodnosti), tj. z:
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
kterou upravím tak, aby kopírovala pouze kořenový tag a jeho atributy a pro další tagy volala jejich šablonu:
<xsl:template match="i|@*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
no a přidáme kopírování tagu x (s jeho atributy) s vnořením jeho následovníků (tj. zde y):
<xsl:template match="x">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:copy-of select="following-sibling::*" />
</xsl:copy>
</xsl:template>
a to je celé neboli:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method='xml' indent='yes' />
<xsl:template match="i|@*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="x">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:copy-of select="following-sibling::*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku