2008 20 September, 2008

TEXTAREA Kollaps problem i XSL / XSLT


Problemformuleringen:
Jag sprang in i detta problem när det gäller textfält i XSLs. I enkla ord, uppstår problemet när du har en tom <textarea> tag, då det kommer att kollapsa till <textarea />.
dvs om du hade något i stil med följande i ditt XSL och XML-data för TEXTAREA värdet återgår ingenting ...

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ textarea>

Eftersom webbläsare inte erkänner detta, kommer det att leda till resten av formuläret HTML för att köra in i textområdet.

Möjliga lösningar:

I XSL, lägg en icke-brytande rymd () efter xsl: värdet tag.BEWARE, att ta hand om detta extra utrymme du har lagt under valideringar klientsidan av detta område.

<textarea name='description'> <xsl:value-of select="DESCRIPTION"/> </ textarea>

Eller
<xsl:value-of select="concat (DESCRIPTION,'')"/>

Eller
Sätt ett <xsl:value-of select="@unknown" /> tagg pekar på en okänd attribut. Detta kommer att tvinga PHP XSLT parser för att generera en öppning och stängning tag textområdet, även om det inte har något däremellan.

Eller
Infoga ett <xsl:text> fält som innehåller ett utrymme för att tvinga en sluttagg.

Men även om de ovan nämnda lösningarna kan tyckas att åtgärda problemet, är jag fortfarande inte övertygad om att de är rätt och bästa sätten att åtgärda det. Om det finns något annat bättre sätt att fastställa detta sarkasm, gör oss.


2008 4 augusti 2008

Ett problem med position () i XSL ... eller är det?

Jag hade lever i en märklig problem när du skapar en XSL idag. Tittade efter svar hela nätet, men kunde inte hitta några .... Egentligen Jag antar! Jag uppkomsten vet vad mitt problem var, så vad ser jag för?

Ändå! Bara om du har detta mycket samma problem också och på något sätt genom kraften i kraft du lyckats landa på denna sida ... du skulle tacka mig massor ... Och om du har råkat hamnat på denna sida av någon underlig öde och du råkar vara en XSL utvecklare, GÖR En anteckning om NU, för framtiden orsak, om en dag, du möter det här problemet, då FORCE kanske inte med dig.

Problem uttalande:
Jag har denna XML, där det finns två noder med flera objekt i den och de poster mellan dessa två noder har en 1-1 korrespondens. I exemplet nedan varje post i noden <array name="PLAYURL" /> avser (motsvarande position) till ett objekt i noden <array name="SITENAME" />

<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>

Nu har jag en slinga, där jag loop through <array name="SITENAME">, och jag vill få den relaterade posten (vid motsvarande position) i <array name="PLAYURL">,

Vad du skulle Normalt försöker göra är ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

SORRY! DENNA brukar fungera ... Ah!! Surpised ...

Nu skulle du förmodligen vill prova, ungefär så här ...

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Och Återigen brukar fungera ... Nu kliar huvudet, försöker kontakta alla som du tror känner till några XSL och kan vara till någon hjälp ... du försöker alla andra alternativ ... och ändå brukar fungera ... Tja! Thats vad som hände mig iallafall ...

DONT förtvivlan!! Try This

<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>

Dont frågar mig varför det fungerar. För jag dont har en rätt anledning ... om du gör! Var snäll och släppa en kommentar. Det kan vara ganska användbar. Också! om du har bättre rätt för det här inlägget, gör släpp mig en linje :)


NDK hem | Att uttrycka IT | uttrycka Palate | uttrycka Penmenship | uttrycka Awe | uttrycka mig