Arkiv for 'XSL' Category

Opkald flere vinduer onLoad funktioner i JavaScript

Lørdag, 7 marts, 2009 Af Nikhil

Heres anden lille peice af Javascript fup, at jeg måtte grave rundt, fordi situationen commaned det. I en af ​​mine hjemmesider, jeg havde denne situation, hvor jeg var nødt til at gennemføre "windows.onload" to gange. Den første ting, der ville kom til en uerfaren sind som mit (Jeg må ærligt sige, at da jeg har brugt JavaScript rammer og biblioteker, jeg har glemt at gøre simple ting på min egen ... trist, men sandt), er følgende metode ...

 window.onload = onloadfn1;
 window.onload = onloadfn2;
 window.onload = onloadfn3;
 etc ...

Ked af at sige, men det plejer arbejde ... ikke ønsker at diskutere udførelsen videnskab Javascript meget ... men ifølge min seneste erfaring, kun den sidste funktion (onloadfn3) vil syge faktisk udført.

I normale situationer, i modsætning til mine (som jeg vil tale om lidt senere) ... du kan gøre et af følgende for at udføre mutliple OnLoad funktioner ....

Eller noget lignende dette

 funktion doOnLoad () {
         onloadfn1 ();
         onloadfn2 ();
         onloadfn3 ();
 }
 window.onload = doOnLoad;

For min nuværende situation, kan jeg ikke bruge nogen af ​​de ...
Hvorfor har jeg brug for at ringe windows.onload to gange, i stedet at kalde to funktioner inden for en enkelt onload funktion? Her er hurtig kig på min problemformulering ...

"Mit websted sider er struktureret ligesom WordPress Theme .... dvs. der er en fælles header.php og footer.php der bliver inkluderet i alle webstedets sider. Der er en onload funktion gennemfoerelse i footer.php til at gøre nogle almindelige onLoad funktioner. Og der er få sider, der har brug for at noget af deres egne onload, bortset fra de gjort ved den fælles onload funktionen. Hvis jeg tildeler callback funktion direkte til window.onload handleren, vil det over-ride tidligere tildelte tilbagekald i footer.php "

.... Er mit problem forstået :) ?

Nå! der er få løsninger, jeg fandt. De alle er meget ens og hovedsagelig implementions af en opløsning givet ved Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Løsning:

Du skal blot tilføje denne JavaScript-kode til stedet ...

 funktion addLoadEvent (funk) {
     var oldonload = window.onload;
     hvis (typeof window.onload! = 'funktion') {
        window.onload = func
     } Else {
        window.onload = function () {
            Hvis (oldonload) {
                   oldonload ()
           }
           FUNC ()
        }
    }
 } 

Og kalder det i stedet for den sædvanlige "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 addLoadEvent (function () {
 / * Mere kode til at køre på side belastning *
 }); 

Fordele ved denne kode snippet ...
1. Primært Det kan du have flere windows.onload begivenheder, kaldet fra separate dele af din kode, uden at overridding den tidligere definition
2. Det er virkelig diskret. Den kan placeres i en fil med dine andre scripts eller i en separat fil.
3. Det virker også selvom window.onload allerede er indstillet.


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


TEXTAREA Collapse problem i XSL / XSLT

Lørdag, 20 september, 2008 By Nikhil


Problemformulering:
Jeg løb ind i dette et problem med hensyn textareas i XSLs. I simple ord, opstår problemet, når du har en tom <textarea> tag, så vil det kollapse det til <textarea />.
dvs hvis du havde noget som følgende i din XSL og XML data for TEXTAREA værdi, returnerer ingenting ...

<Textarea name = "beskrivelse"> <xsl: value-of select = "Beskrivelse" /> </ textarea>

Da browsere ikke anerkender dette, vil det medføre, at resten af ​​formularen HTML til at løbe ind i tekstområdet.

Løsninger:

I XSL, tilføje en non-breaking-space () efter xsl: value tag.BEWARE, at tage sig af denne ekstra plads du har tilføjet under klientsiden valideringer i dette område.

<Textarea name = "beskrivelse"> <xsl: value-of select = "Beskrivelse" /> </ textarea>

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

Eller
Indsæt en <xsl: value-of select = "@ ukendt" /> tag, der peger på en ukendt attribut. Dette vil tvinge PHP XSLT parser til at generere en åbning og lukning tekstområde tag, selv om det ikke har noget i mellem.

Eller
Indsæt en <xsl: text> felt, der indeholder et rum til at tvinge en afsluttende tag.

Men selv om de ovennævnte løsninger kan synes at løse problemet, er jeg stadig ikke overbevist om, at de har ret og bedste måder at løse det. Hvis der er nogen andre bedre måde at ordne denne ejendommelighed, Please lad os vide.


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


En række XSL prøvningsbetingelser (Indsamling af XSL: IF og XSL: Når AFPRØVNINGSBETINGELSER)

Søndag, 14 september, 2008 Af Nikhil

Hver gang jeg nødt til at gøre en XSL: IF eller XSL: NÅR test, jeg har tilbage til opslagsværker. Jeg synes aldrig at huske dem. Troede der ville være mere derude, ligesom mig, der hellere ville foretrække at have dem alle, det er muligt, på et sted, klar til at blive henvist efter behov.

For dem, der er nye ... Syntaks for XSL: IF

<Xsl: Hvis test = "udtryk">
<! - Indhold: skabelon ->
</ Xsl: hvis>

Den xsl: Hvis / xsl: når Test Collection
Betingelserne nedenfor er alle enkle og selvforklarende. Så jeg tror, ​​det behøver ikke megen forklaring

<Xsl: Hvis test "position () = sidste () - 1" =>
Dette hvis næstsidste element i listen!
</ Xsl: hvis>

<Xsl: Hvis test = "LØN> 5000">
Løn til denne person er større end Rs. 5000
</ Xsl: hvis>

<Xsl: Hvis test = "count (JOB)> 3">
Der er mere end 3 job i denne liste!
</ Xsl: hvis>

<Xsl: Hvis test = "(@ DEPT = 'salg«) eller (JOINYEAR =' 1997 ') ">
Denne person er fra salgsafdelingen ELLER hans år efter tiltrædelsen, er 1997
</ Xsl: hvis>

<Xsl: Hvis test = "erfaring">
Denne person har mindst én erfaring barn element.
</ Xsl: hvis>

<Xsl: Hvis test = "@ HOBBY">
Personen har en attribut hobby.
</ Xsl: hvis>

Den samme tekst betingelser kan anvendes til XSL: VÆLG / XSL: NÅR så godt

xsl: vælg

XSLT s xsl: vælg instruktion ligner xsl: hvis men har et par vigtige forskelle:
• En xsl: Vælg element kan teste for mere end en tilstand og tilføje forskellige noder til resultatet træet baseret på hvilken betingelse er sand.
• En xsl: Vælg element kan have en standardskabelon at tilføje til det resultat træ, hvis ingen af ​​betingelserne er sande. (Sammenlign xsl: Hvis, der ikke har noget, der svarer til en "andet" tilstand.)
• Den xsl: Vælg element har specifikke delelementer, som er nødvendige for at det virker, mens du kan sætte enhver velformede elementer, du ønsker inde i en xsl: hvis element.

<Xsl: Vælg>
<Xsl: når test = "boolean-udtryk">
Gør noget når denne boolean-udtryk er TURE
</ Xsl: når>
<Xsl: ellers> Gør noget andet </ xsl: ellers>
</ Xsl: Vælg>


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


Tokenizing Afgrænset String inde i en XSL

Onsdag August 13, 2008 Af Nikhil

Hvis dit krav er at opdele en node værdi i en XML, der indeholder en afgrænset streng af værdi, i individuelle elementer, så du har nået det rigtige sted ... har et kig på nedenstående eksempel. Hvis du er fortrolig med en lille smule af XML og XSL ... Jeg tror ikke, du behøver nogen forklaring.
Også dette eksempel omfatter brug af XSL funktioner som xsl: call-skabelon, xsl: substring-før, xsl: substring-efter, hvis det er det du er ude efter.

XML skal transformeres (food.xml): -
Antag opgaven er at tokenize strengen afgrænset af komma, i "søgeord" TAG

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<keywords>Fruits, Vegetables, Pulses, Meat, Cereals </keywords>
</food>

XSL (food.xsl): -

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>XSL 1.0 Delimited String Tokeniser</title>
</head>
<body>
<xsl:value-of select="food/meta"/>
<div >
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="food/keywords" />
<xsl:with-param name="delimitr" select="','" />
</xsl:call-template>

</div>
</body>
</html>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="string" />
<xsl:param name="delimitr" />
<xsl:choose>
<xsl:when test="contains($string, $delimitr)">
<div style="border:1px solid red;">
<h3><xsl:value-of select="substring-before($string,$delimitr)" /></h3>
<xsl:variable name="data" select="substring-before($string,$delimitr)"/>
</div>
<xsl:call-template name="tokenize">
<xsl:with-param name="string" select="substring-after($string, $delimitr)" /><xsl:with-param name="delimitr" select="$delimitr" /></xsl:call-template>
</xsl:when>
<xsl:otherwise>
<div style="border:1px solid red;">
<h3><xsl:value-of select="$string" /></h3>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Resulterende output HTML: -

<div>
<div style="border: 1px solid red;">
<h3>Fruits</h3>
</div>
<div style="border: 1px solid red;">
<h3> Vegetables</h3>
</div>
<div style="border: 1px solid red;">
<h3> Pulses</h3>
</div>
<div style="border: 1px solid red;">
<h3> Meat</h3>
</div>
<div style="border: 1px solid red;">
<h3> Cereals </h3>
</div>
</div>

Det er overflødigt at sige ... bare ændre parameteren "delimitr" til skilletegn efter eget valg


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


Et problem med position () i XSL ... eller er det?

Mandag 4 august, 2008 By Nikhil

Jeg havde denne strage problem under oprettelse af en XSL dag. Kiggede efter svar i hele nettet, men kunne ikke finde noget .... Faktisk jeg gætte! Jeg dint ved, hvad mit problem var, så hvad skal jeg kigge efter?

Anyway! Just in case du har dette meget samme problem også og på en måde, som magt FORCE du lykkedes at lande på denne side ... du vil takke mig tonsvis ... Og hvis du har et uheld landede på denne side for nogle mærkelige skæbne, og du tilfældigvis en XSL-udvikler, MÅ gøre et notat af det nu, FOR FREMTIDEN årsag, hvis en dag, du står over for dette problem, så FORCE måske ikke være sammen med dig.

Problem erklæring:
Jeg har denne XML, hvor der er to noder med flere elementer i det, og de poster mellem disse to knudepunkter har en for en korrespondance. I eksemplet nedenfor, hvert element i node <vifte name = "PLAYURL" /> vedrører (svarende position) til et element i noden <vifte 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 jeg en løkke, hvor jeg sløjfe gennem <vifte name = "SITENAME">, og jeg ønsker at få den relaterede post (ved den tilsvarende position) i <vifte name = "PLAYURL">,

Hvad ville du normaly forsøge gøre, er ...

<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>

DESVÆRRE !! DENNE wont arbejde ... Ah !!!! Surpised ...

Nu vil du sikkert lyst til at prøve, noget som dette ...

<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>

Og Igen plejer arbejde ... Nu du skrabe dit hoved, forsøger at kontakte alle, hvem du tror kender nogle XSL og kunne være til nogen hjælp ... du prøve hver anden indstilling ... og stadig det plejer arbejde ... Nå! Thats hvad der skete for mig mindst ...

DONT fortvivlelse !!! Prøv dette

<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 ASK ME, hvorfor det virker. Årsag jeg dont have en ret årsag ... hvis du gør! Undlad venligst at droppe en kommentar. Det kan være temmelig praktiske. Også! hvis du har bedre titel til dette indlæg, skal du drop mig en linje :)


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


Indstilling af DOCTYPE i XSL

LØRDAG 2 august, 2008 Af Nikhil

I sidste uge skabte jeg en progessive HTML / CSS layout for en klient, testede det i IE6, IE7 og 3 FF, syntes helt fint ... INDTIL! layoutet gik længere nede på manufacting cyklus. Det mislykkedes. Side layout elementer gik bare over det hele, når HTML-layout blev omdannet til XSL og XML anvendes til det ... Øv !!!

Kunne ikke sove ok i weekenden, i forventning om mandag morgen, da jeg bliver nødt til at løse dette SH **. Men nu har en lille oplevelse i forbindelse med den slags situationer (Browser Quirks, mener jeg), jeg vidste, at det havde at gøre med noget andet, men DOCTYPE .... og det var ...

Problemet:
Du ønsker kontrol over DOCTYPE, da din forvandling vil omfatte en standard DOCTYPE eksplicit, og du layout vil være ude for et kast.

Løsningen:
XSLT specs giver output-metoder til at indstille en DOCTYPE af valget. Også for os UI udviklere, ville emner af interesse være HTML-output-metoder og XML output-metoder .

Nå! før du får keder sig, her er det fix.

For eksempel, hvis du havde følgende DOCTYPE i din HTML-version:. -

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

Så i XSL du skulle have følgende: -

<xsl:output method="html" doctype-system="http://www.w3.org/TR/html4/loose.dtd" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" indent="yes" />

og endelig! gør at din XSLT output adlyder DOCTYPE du har valgt.


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


Medtag XSL inde XSL

Søndag Maj 4, 2008 Af Nikhil

Hvis XML / XSL transformationer er dit domæne, så er der tidspunkter, hvor vi ønsker en peice af Dynamic Kode til bibliotek post (gøres genbrugelige). Hvad jeg mener, kunne sandsynligvis gøres mere tydeligt med dette eksempel scenario.

Forestil du opretter en hjemmeside (og ved hjælp af XML, XSL transfroms naturligvis) ville, og de ​​fleste af siderne har en Comments Module. Nå! derefter enten du kopierer eller indsæt denne kode på hver side skabelon (som jeg dont have sige, men gør vedligeholdelse og omarbejde et mareridt), eller endnu bedre, du opretter en INDEHOLDE fil, som kunne trækkes i hvor nogensinde du ønsker det i din side ( s) ...
Så hvordan skaber vi et XSL INDEHOLDE fil og medtage den inde i en anden XSL fil? Her er, hvordan ...

Bare for at gøre tingene klart ... her er hurtig liste over filer, som du ville skabe ... Her vil vi herunder info om frugt og grøntsager til en forælder side kaldet mad.

1. food.xml - xml datafil, som omdannelsen vil blive anvendt
2. food.xsl - main XSL-fil, som vil forvandle vores food.xml
3. inc_fruits.xsl - XSL omfatter fil, vil gøre frugt data
4. inc_vegtables.xsl - XSL omfatter fil, vil gøre vetetables data

Jeg tror ikke, jeg har forklare meget, koderne for ovenstående elementer, vil være selvforklarende ...

FOOD.XML


<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<date>July 2008</date>
<description>All about things we eat everyday</description>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>

<vegetables>
<item name="spinach" moreinfo="http://www.spinach.com">Spinach is full of iron</item>
<item name="asparagus" moreinfo="http://www.asparagus.com">Asparagus contains loads of vitamin D </item>
<item name="fenugreek" moreinfo="http://www.fenugreek.com">Fenugreek is rich in vitamin C</item>
</vegetables>
</food>


FOOD.XSL


<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="inc_fruits.xsl" />
<xsl:include href="inc_vegetables.xsl" />
<xsl:template match="/">
<html>
<head>
<title>Title</title>
</head>
<body>
<h3><xsl:value-of select="/food/description" /></h3>
Modification Date : <xsl:value-of select="/food/date" />
<hr/>
<h5> About Fruits</h5>
<xsl:call-template name="about_fruits"/>

<hr/>
<h5> About Vegetables</h5>
<xsl:call-template name="about_vegetables"/>

<Hr />
</ Body>
</ Html>
</ Xsl: template>
</ Xsl: stylesheet>


INC_FRUITS.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_fruits">
<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>


INC_VEGETABLES.XSL

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" />
<xsl:template name="about_vegetables">
<xsl:for-each select="/food/vegetables/item/@*">
attribute name : <xsl:value-of select="name()"/>
attribute value : <xsl:value-of select="."/> <br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Download alle de ovennævnte filer her (386 downloads)


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


Arbejde med XML-node attributter i XSLT

Fredag, april 4, 2008 Af Nikhil

Hvis du bruger XML og XSL, så er du måske stødt på et tidspunkt, når du er nødt til at lege lidt med attributter og værdier XML noder i dig XSL. De er masser af steder med lang forpustet info om dette, men ingen jeg fandt var kort og præcis ... Det er ingen XML / XSL TUTORIAL, men mit forsøg på at sætte-sammen en slags snyde liste ...

Prøven XML, at vi vil arbejde med udseende som denne ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="food.xsl"?>
<food>
<fruits type="tropical">
<item name="mango" moreinfo="http://www.mango.com">Mango is the king of fruits</item>
<item name="banana" moreinfo="http://www.banana.com">Banana once a day , keeps the doctor away</item>
<item name="orange" moreinfo="http://www.orange.com">Orange is the color and rich in vitamin C</item>
<item name="Papaya" moreinfo="http://www.papaya.com">Papaya - Hot when raw, cold when ripe</item>
</fruits>
</food>

Så lader begynde at omdanne vores ovenstående XML ved hjælp af XSL

Eksempel 1: Viser værdi på et valgt Egenskab

<xsl:value-of select="/food/fruits/item[@name='orange']" /><br />
to get more information about <a href="{/food/fruits/item[@name='orange']/@moreinfo}" target="new" ><xsl:value-of select="/food/fruits/item[@name='orange']/@name" /> </a>

HTML resultat vil se ud

Orange is the color and rich in vitamin C,
to get more information about <a href="http://www.orange.com" target="new">


Eksempel 2: Looping igennem og vise alle XML-attribut Navne og deres værdier

<xsl:for-each select="/food/fruits/item/@*">
attribute name : <xsl:value-of select="name()"/>,
attribute value : <xsl:value-of select="."/> <br />
</xsl:for-each>

HTML resultat vil se ud


attribute name : name, attribute value : mango
attribute name : moreinfo, attribute value : http://www.mango.com
attribute name : name, attribute value : banana
attribute name : moreinfo, attribute value : http://www.banana.com
attribute name : name, attribute value : orange
attribute name : moreinfo, attribute value : http://www.orange.com
attribute name : name, attribute value : Papaya
attribute name : moreinfo, attribute value : http://www.papaya.com


Download alle de ovennævnte filer her (388 downloads)



Se denne plads, jeg vil holde opdatere denne med nye fund ...


get ExpressingIT News by Email Abonner på ExpressingIT via e-mail eller Følg mig på Twitter


Abonner på ExpressingIT RSS
get ExpressingIT News by Email Abonner på ExpressingIT via e-mail
Følg mig på Twitter