Arkiv for 'XSL' Category

Opkald flere vinduer onload funktioner i JavaScript

Lørdag marts 7, 2009 Af Nikhil

Heres anden lille peice af Javascript svindel, 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 ligesom mine (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;
 osv ...

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

I normale situationer, i modsætning til mine (som jeg vil tale om lidt senere) ... kan du 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, snarere at kalde to funktioner inden for en enkelt onload funktion? Her er hurtigt kig på mit problem erklæring ...

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

.... Mit problem er forstået :) ?

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

Løsning:

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

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

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

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

Fordele ved denne kodestykke ...
1. Primært, det lader du har flere windows.onload begivenheder, kaldes fra separate dele af din kode, uden 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, selv om 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 Af 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 = 'description'> <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, i løbet af klientsiden valideringer i dette område.

<Textarea name = 'description'> <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, venligst lad os vide.


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


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

Søndag, 14 september, 2008 Af Nikhil

Hver gang jeg er nødt til at gøre et XSL: IF eller XSL: NÅR test, har jeg gå tilbage til opslagsværker. Jeg synes aldrig at huske dem. Troede, at 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 når det er nødvendigt.

For dem, der er nye ... Syntaks til XSL: HVIS

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

Den xsl: hvis / xsl: når Test Collection
Nedenstående betingelser alle er enkle og selvforklarende. Så jeg tror, ​​det vil ikke brug for megen forklaring

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

<Xsl: if test = "LØN> 5000">
Aflønning af denne person er større end Rs. 5000
</ Xsl: if>

<Xsl: hvis test = "count (JOBS)> 3">
Der er mere end 3 arbejdspladser i denne liste!
</ Xsl: if>

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

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

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

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

xsl: vælg

XSLT er xsl: vælg instruktion ligner xsl: hvis men har et par vigtige forskelle:
• En xsl: Vælg element kan teste for mere end én betingelse og tilføje forskellige noder til resultatet træet baseret på hvilken betingelse er sand.
• En xsl: vælg elementet kan have en standardskabelon at tilføje til det resultat, træ, hvis ingen af ​​betingelserne er sande. (Sammenlign xsl: hvis der ikke findes tilsvarende et "andet" tilstand.)
• XSL: Vælg element har specifikke delelementer, som er nødvendige for at arbejde, mens du kan sætte enhver velformede elementer, du ønsker inde i en xsl: if 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 et XML, der indeholder en afgrænset streng af værdi i de enkelte poster, så du har nået det rigtige sted ... have et kig på nedenstående eksempel. Hvis du er fortrolig med en lille smule af XML og XSL ... Jeg tror ikke, du ville brug for nogen forklaring.
Også dette eksempel omfatter brug af XSL funktioner som xsl: call-template, xsl: substring-before, xsl: substring-efter, hvis det er det du er ude efter.

XML skal transformeres (food.xml): -
Påtage sig 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 udgang 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 den afgrænser af dit 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 Af Nikhil

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

Alligevel! Just in case du har denne meget samme problem også, og en eller anden måde ved magten i 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 elementer mellem disse to knudepunkter har en for en korrespondance. I nedenstående eksempel, hvert element i noden <vifte name = "PLAYURL" /> vedrører (svarende stilling) 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 (i den tilsvarende position) i <vifte name = "PLAYURL">,

Hvad ville du normaly prøve 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, som du tror kender nogle XSL og kunne være til nogen hjælp ... du prøve hver anden mulighed ... og stadig det plejer arbejde ... Godt! Thats hvad der skete for mig mindst ...

DONT Despair !!! 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 spørger mig, hvorfor det fungerer. Fordi jeg ikke har en ret årsag ... hvis du gør! Undlad venligst at droppe en kommentar. Det kan være temmelig praktiske. Også! hvis du har en 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 DOCTYPE i XSL

LØRDAG 2 august, 2008 Af Nikhil

I sidste uge skabte jeg en Progressiv HTML / CSS layout til en klient, testet det i IE6, IE7 og 3 FF, virkede helt fint ... INDTIL! layoutet gik yderligere ned manufacting cyklus. Det mislykkedes. Side layout elementer gik bare over det hele, når HTML-layout blev omdannes til XSL og XML anvendes til det ... Nedern !!!

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 disse slags situationer (Browser Quirks, mener jeg), jeg vidste, at det havde at gøre med noget andet, men DOCTYPE .... Og det var ...

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

Løsningen:
XSLT specs giver output-metoder til at sætte 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 rettelsen.

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

Derefter i XSL ville du nødt til at 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 sikker 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 4 maj, 2008 Af Nikhil

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

Forestil dig du opretter en hjemmeside (og ved hjælp af XML, XSL transfroms naturligvis) ville, og de ​​fleste af siderne har et Kommentar-modulet. Nå! derefter enten du kopierer eller indsætte denne kode på hver side skabelon (som jeg ikke har sagt, men gøre vedligeholdelse og omarbejde et mareridt), eller endnu bedre, kan du oprette en include-fil, der 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, du ville skabe ... Her vil vi bl.a. info om frugt og grøntsager til en forælder side kaldet mad.

1. food.xml - XML ​​datafil, som transformationen vil blive anvendt
2. food.xsl - main XSL fil, som vil forvandle vores food.xml
3. inc_fruits.xsl - XSL omfatter fil, der vil gøre frugter data
4. inc_vegtables.xsl - XSL omfatter fil, der 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 ovenstående filer her (372 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 spille rundt med attributter og værdier XML knudepunkter i dig XSL. De er masser af sites 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å Lad os begynde at omdanne vores ovenstående XML hjælp 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 viser 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 ovenstående filer her (374 downloads)



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


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