2008 2 augusti 2008

Ställa in DOCTYPE i XSL

Förra veckan skapade jag en progessive HTML / CSS layout för en klient, testade den i IE6, IE7 och FF 3, verkade väl bra ... tills! layouten gick längre ner i manufacting cykeln. Det misslyckades. Sidlayout element gick bara överallt när HTML layouten omvandlades till XSL och XML tillämpas på det ... Bummer!

Kunde inte sova ok under helgen, i väntan på måndag morgon, när jag måste fixa detta SH **. Men nu har lite experince att hantera denna typ av situationer (Webbläsare Quirks, jag menar), jag visste det hade att göra med inget annat än DOCTYPE .... och det var ...

Problem:
Du vill ha kontroll över DOCTYPE, eftersom din förvandling kommer att innehålla en standard DOCTYPE explicit, och du layout kommer att vara borta ett dugg.

Lösningen:
XSLT specs ger utgående metoder för att ställa in en DOCTYPE för val. Även för oss UI utvecklare skulle intresseområden är HTML-utdata metoder och XML metoder produktion .

Tja! innan du blir uttråkad, här är den fix.

För t.ex. Om du hade följande DOCTYPE i din HTML-versionen. -

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

Sedan i XSL du måste ha följande: -

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

och slutligen! gör att din XSLT utgång lyder DOCTYPE du har valt.


2008 4 maj 2008

Innefattar XSL inuti XSL

Om XML / XSL Förvandlas är din domian, då finns det tillfällen då vi vill ha en lappa av Dynamic kod som ska användas bibliotekspost (göras återanvändbar). Vad jag menar, skulle förmodligen bli mer tydliga med detta exempel scenario.

Tänk dig att du skapar en webbplats (och med hjälp av XML, XSL transfroms självklart) och de flesta av sidorna skulle ha en Kommentar modul. Tja! sedan antingen du kopiera eller klistra in den här koden i varje sidmall (som jag inte har något att säga, men gör underhåll och omarbetningar en mardröm) eller ännu bättre, skapar du en include-fil som kan dras in var du vill ha det i din sida ( s) ...
Så Hur skapar vi en XSL INCLUDE fil och inkludera den i en annan XSL fil? Här är hur ...

Bara för att göra saker klart ... här är snabb lista över filer som du skulle skapa ... här kommer vi bland annat info om frukt och grönsaker till en överordnad sida som heter mat.

1. food.xml - XML-datafil som omvandlingen ska tillämpas
2. food.xsl - Main XSL-fil, som kommer att förändra vårt food.xml
3. inc_fruits.xsl - XSL innehåller fil som kommer att göra frukt uppgifter
4. inc_vegtables.xsl - XSL innehåller fil som kommer att göra vetetables uppgifter

Jag tror inte jag har att förklara mycket, koderna för ovanstående faktorer kommer att vara självförklarande ...

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>

Ladda ner alla dessa filer här (256 nedladdningar)


2008 4 April, 2008

Arbeta med XML-nod attribut i XSLT

Om du använder XML och XSL, då kanske du har stött på en tid, när man har att leka med attribut och värderingar XML noder i dig XSL. De är massor av platser med långa omständlig info om detta, men ingen jag hittade var kortfattade och precisa ... Detta är inte XML / XSL tutorial, men mitt försök att sätta-ihop några slags fusk lista ...

Provet XML att vi kommer att arbeta med ser ut så här ...

<?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å låter börja omvandla våra ovan XML med XSL

Exempel 1: Visar värdet vid en vald attribut

<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 kommer att se ut

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


Exempel 2: Looping igenom och visa alla XML attributnamn och deras värderingar

<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 kommer att se ut


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


Ladda ner alla dessa filer här (249 nedladdningar)



Titta på detta utrymme, jag håller uppdatera detta med nya rön ...


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