[xslt] Przekazywanie elementów przez param.

0

Kolejny problem z xslt.

Chcę przekazać element img jako parametr do template. Daję:

<xsl:apply-templates select="node">
  <xsl:with-param name="indent">
    <img src="spacer.png"/>
  </xsl:with-param>
</xsl:apply-template>
...
<xsl:template select="node">
  <xsl:param name="indent"/>
  <xsl:value-of select="$indent"/>
</xsl:template>

I niestety nie działą to. Jeżeli tam stringa jakiegoś, to przekazuje bez problemu.

Ew. może ktoś podpowie, jak przekazać nbsp? W ogóle jak wstawić do xslt, bo krzyczy mi parser :(

0

  nie ma standardowo w XML. Taka encja po prostu nie istnieje. Trzeba użyć kodu unikode (&#160 chyba), ewentualnie zadeklarować encję   w DTD.

0

Element możesz przekazać zamykając go w CDATA:

<xsl:with-param name="indent">
	<![CDATA[<img src="spacer.png"/>]]>
</xsl:with-param>

ale wtedy chyba z niego nie skorzystasz (masz po prostu stringa).

W tym konkretnym przypadku można zrobić tak:

<xsl:with-param name="indent">
	spacer.png
</xsl:with-param>
...
<xsl:template select="node">
	<xsl:param name="indent"/>
	<img src="{$indent}"/>
</xsl:template>

chociaż podejrzewam że chodzi Ci o przekazywanie dowolnego elementu do ustalania wcięcia. Chyba będziesz musiał użyć xsl:choose w drugim szablonie.

Spacja to   albo  

0

Otóż z #160 też próbowałem. Encje też sobie deklarowałem. Problem jest taki, że potrzebowałem użyć tego jako parametr w funkcji concat i tam już krzyczał parser. Ale obszedłem to odwołując się do definicji konkatenacji... po prostu wstawiłem nbsp obok wcześniejszego wcięcia i tak dalej w głąb funkcji/szablonu przekazywałem :)

Co do obrazka, to tak, chodziło o wcięcia. Tam użyłem przekazywanie wartości wcięcia, a następnie wywołanie rekurencyjnej funkcji/szablonu. Nie jest może zbyt elastyczne rozwiązanie, ale jedyne jakie mi zadziałało. Ale chyba i tak przy wcieciach spacjami zostanę.

Dzięki za odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1