Kategori Arkiv: XSLT

XSLT og jQuery prøver

Jeg har gjort en masse af XSLT og jQuery og tænkte jeg deler et par uddrag, som andre kan finde nyttige i fremtiden.

Eksempel 1: Udsende enkel JavaScript / jQuery i XSLT:

<XSL:skabelon match = "noget" XML:plads = "bevare">

  <!– Tomt ud forespørgselsfelt venlige filtre skjulte –>
  <script type = "tekst/javascript">
    $(dokument).klar til(funktion(){
      $("#QueryFriendlyFilters").Val("tom");
    });
  </script>

</XSL:skabelon>

Denne bit udsender nogle JavaScript, der venter på siden for at afslutte indlæsning (på grund af den $(dokument).klar til(…)) og derefter indstiller værdien af et skjult felt opkaldt QueryFriendlyFilters til konstantværdi "tom".

Eksempel 2: Brug <XSL:Hvis> at kontrollere "større end",  "mindre end", osv.

<XSL:skabelon match = "noget" XML:plads = "bevare">

  <div id = "fdcAllFilters">
 
    <XSL:Hvis test="@Count>0">
      <kalibreringsgas klasse = "fdcFilterLabel">Aktuelle filtre:</span>
    </XSL:Hvis>

    <!– flere ting sker her. –>

</XSL:skabelon>

Den ovennævnte snippet kontrollerer, hvis en attribut med navnet "Tæller" i elementet "noget" er større end nul.  XML bag dette ville være noget:”

<noget Count = "5" />

Eksempel 3: Iterere gennem alle elementer, indsætte jQuery opkald.

<!– Iterere gennem alle filtrene og vise den korrekte  links. –>
<XSL:for hver select = "UserFilter">

  <en klasse = "FilterHref" href = "javascript:mySubmitPage('RemoveUserFilter','{@ ID}’)">[X]</en>

  <kalibreringsgas klasse = "fdcFilterLabel"><XSL:værdi-af select="@FilterValue"/></span>

  <script type = "tekst/javascript">

    $(dokument).klar til(funktion(){
        <XSL:tekst><![CDATA[$("#QueryFriendlyFilters").Val( ($("#QueryFriendlyFilters").Val() + " ]]></XSL:tekst>\"<XSL:værdi-af select="@FilterValue"/>\"<XSL:tekst><![CDATA["));]]></XSL:tekst>
    });

  </script>

</XSL:for hver>

Den ovennævnte snippet er den mest komplekse og kan der lettere måder at gøre det.

XML bag dette ser nogenlunde sådan ud:

<UserFilter ID = "123" FilterValue = "xyzzy" />

Denne snippet iterere gennem <UserFilter> noder. 

Det første udsender et anker mærke, når der klikkes på påberåber sig en JavaScript-funktion, der allerede er på siden, "mySubmitPage" og passerer værdien af en attribut den <UserFilter> node med navnet "ID". 

Det udsender derefter nogle jQuery, som venter på siden for at indlæse.  At jQuery opdaterer et skjult felt med navnet "QueryFriendlyFilters" ved at tilføje værdien af attributten FilterValue.  Bemærk alle crazy <XSL:tekst> og <![CDATA[ … ]]> Stuff.

Det er det, håbe, det hjælper!

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Uendelige indlejring <div> Mærker og jQuery

Dette synes at være sådan en oddball emne, Jeg er ikke sikker på, at det er virkelig værd at blogging om, men der er aldrig stoppet mig før, så her gå vi Smil

Jeg arbejder på et projekt, hvor jeg trækker nogle data fra en søgning, emballage det i en XML-besked og derefter at XML er i sidste ende omdannes til HTML via XSLT.  Der er en masse af jQuery involveret, en smule som implementerer nogle Tabber funktionalitet.  Når du klikker på en fane (Virkelig, en <div>), jQuery påberåber sig .hide() og .show() på forskellige divs (den første side belastning henter alt indholdet, så der er ingen postbacks i dette tilfælde).

En flok af timer siden, fanen skifte logik begyndte at opføre sig ustabilt og det ville ikke vise en af mine faner.  Jeg i sidste ende sporede det ned til faktum, at internet explorer (mindst) troede, at den <div> Tags indlejret langt, langt dybere end beregnet.Udvikler værktøj vil vise:

-<div id = "Tab1Content">
  -<div>
    -<div>
      -<div id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <— Endelig viser det var lukket helt ned her!

Så, Hvis jeg gjorde en $("#Tab1Content").Skjul(), Jeg ville også skjule Fane2, og jeg kunne aldrig vise Fane2 hvis jeg ikke også vise Fane1.  Jeg har kopieret og indsat koden i visual studio og det viste alle div's foring op pænt, ligesom de skulle gøre, ser ud som dette:

-<div id = "Tab1Content">
  +<div>
  +<div>
-<div id = "Tab2Content">
  +<div>
  +<div>

Jeg slog mit hoved mod væggen for et stykke tid og bemærket, at i den faktiske HTML kode genererer en masse tomme <div> Tags, ligesom:

<kroppen>

  <div id = "Tab1Content">

    <div id = "row1" />
    <div id = "row2" />

  </div>

  <div id = "Tab2Content">

    <div id = "row1" />
    <div id = "row2" />

  </div>

</kroppen>

(Ovenstående er waaaaaaaaaaaay forsimplede.  Tom div tags er helt gyldigt. Nogle af mine <div> Tags var fuld af indhold, men mange flere blev ikke.  Jeg kom til erkendelsen at min <XSL:for hver> direktiverne udsender kort form div tags når xsl:for hver gjorde ikke ' finde data.  Jeg tvunget en HTML-kommentar til output, som vist:

image

 

Efter at jeg gjorde det, alle div foret pænt og min fane skifte begyndte at arbejde.

Som altid, Jeg håber dette hjælper en person i en knivspids.

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin

Eksempel: XSLT oprette HTML-Href

Jeg har været gør lidt af XSL-stuff det seneste og troede jeg ville tilsammen en prøve for min fremtidige henvisning og som kan være af værdi for os alle XSLT-omhandlet gør en levende i internets.

Overveje følgende XML:

<FdcSearchTabsCollection Count = "2">
  <SearchTab etiket = "industri" SortOrder = "00" etiket = "Industrier" SearchConstraints = "contenttype:Industri" TabID = "831b2a74-98c4-4453-8061-86e2fdb22c63" />
  <SearchTab etiket = "praksis" SortOrder = "01" etiket = "Praksis" SearchConstraints = "contenttype:PracticeGroups" TabID = "678e206b-6996-421f-9765-b0558fe1a9c0" />
</FdcSearchTabsCollection>

Den følgende XSL snippet vil generere en sorteret liste af faner, hrefs:

<XSL:skabelon match = "FdcSearchTabsCollection" XML:plads = "bevare">
   
    <!– Alle"" fanen –>
    <a href = "javascript:ViewTab('Alle')">Få vist alle</en>
   
    <!– Hver enkelt fane –>
    <!– Iterere gennem alle fanerne og vise den korrekte  links. –>
    <XSL:for hver select = "SearchTab">
      <XSL:sortere select="@SortOrder"/>

      …
      <a href = "javascript:ViewTab(‘{@ TabID}’)"><XSL:værdi-af select="@Label"/></en>
    </XSL:for hver>

    <BR /> 
   

   </XSL:skabelon>

Her er hvad det ser ud i SharePoint:

SNAGHTML78aa2cb

 

 

</slutningen>

Abonner på min blog.

Følg mig på kvidre på http://www.twitter.com/pagalvin