XML Tutorial/XSLT stylesheet/if
Содержание
- 1 Check two attributes
- 2 if test="not(preceding-sibling::address[zip=$lastZip])"
- 3 if test="(position() mod
- 4 Nested if statement
- 5 select with if them else statement
- 6 The <xsl:if> Element: Conditional Processing
- 7 Use if statement to check whether it is the last
- 8 Use if statement to test if an element as an attribute
- 9 xsl:if instruction enables conditional processing
Check two attributes
<source lang="xml">
File: Data.xml <?xml version="1.0" standalone="yes"?> <poem author="jm" year="1667">
<verse>line 1</verse> <verse>line 2</verse> <verse>line 3</verse> <verse>line 4</verse>
</poem> File: Transform.xslt <?xml version="1.0" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="text" /> <xsl:template match="poem"> <xsl:if test="(@author = "bd") or (@year="1667")"> Either the author is "bd" or the year is "1667". </xsl:if> </xsl:template>
</xsl:stylesheet> Output:
Either the author is "bd" or the year is "1667".</source>
if test="not(preceding-sibling::address[zip=$lastZip])"
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <addressbook>
<address> <name> <title>Ms.</title> <first-name>Doris</first-name> <last-name>Smith</last-name> </name> <street>707 Main Way</street> <city>New York</city> <state>ME</state> <zip>00218</zip> </address> <address> <name> <first-name>Jane</first-name> <last-name>Smith</last-name> </name> <street>283 First Avenue</street> <city>Vancouver</city> <state>MA</state> <zip>02718</zip> </address>
</addressbook> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="no"/> <xsl:variable name="newline"> <xsl:text></xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:text>Addresses sorted by zip code</xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="addressbook/address"> <xsl:sort select="zip"/> <xsl:sort select="name/last-name"/> <xsl:sort select="name/first-name"/> <xsl:variable name="lastZip" select="zip"/> <xsl:if test="not(preceding-sibling::address[zip=$lastZip])"> <xsl:text>Zip code </xsl:text> <xsl:value-of select="zip"/> <xsl:text>: </xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="/addressbook/address[zip=$lastZip]"> <xsl:sort select="name/last-name"/> <xsl:sort select="name/first-name"/> <xsl:if test="name/title"> <xsl:value-of select="name/title"/> <xsl:text> </xsl:text> </xsl:if> <xsl:value-of select="name/first-name"/> <xsl:text> </xsl:text> <xsl:value-of select="name/last-name"/> <xsl:value-of select="$newline"/> <xsl:value-of select="street"/> <xsl:value-of select="$newline"/> <xsl:value-of select="$newline"/> </xsl:for-each> </xsl:if> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: Addresses sorted by zip codeZip code 00218: Ms. Doris Smith707 Main WayZip code 02718: Jane Smith283 First Avenue</source>
if test="(position() mod
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <list>
<title>Java</title> <listitem>Item 1</listitem> <listitem>Item 2</listitem> <listitem>Item 3</listitem> <listitem>Item 4</listitem> <listitem>Item 5</listitem> <listitem>Item 6</listitem> <listitem>Item 7</listitem> <listitem>Item 8</listitem>
</list> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/> <xsl:variable name="newline"> <xsl:text></xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:value-of select="$newline"/> <xsl:text>Here are the odd-numbered items from the list:</xsl:text> <xsl:value-of select="$newline"/> <xsl:for-each select="list/listitem"> <xsl:if test="(position() mod 2) = 1"> <xsl:number format="1. "/> <xsl:value-of select="."/> <xsl:value-of select="$newline"/> </xsl:if> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: Here are the odd-numbered items from the list:1. Item 13. Item 35. Item 57. Item 7</source>
Nested if statement
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <poem author="jm" year="1667">
<verse>line 1</verse> <verse>line 2</verse> <verse>line 3</verse> <verse>line 4</verse>
</poem> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="text" /> <xsl:template match="poem"> <xsl:if test="@year < "1850""> The poem is old. <xsl:if test="@year < "1700""> The poem is very old. </xsl:if> <xsl:if test="@year < "1500""> The poem is very, very old. </xsl:if> </xsl:if> </xsl:template>
</xsl:stylesheet> Output:
The poem is old. The poem is very old.</source>
select with if them else statement
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <cars>
<make geography="Europe">Alfa Romeo</make> <make geography="Europe">Bentley</make> <make geography="North America">Chevrolet</make> <make geography="North America">Dodge</make> <make geography="North America">GMC</make> <make geography="Asia">Honda</make> <make geography="Asia">Isuzu</make> <make geography="?">Quantum</make>
</cars> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/"> <xsl:for-each select="cars/make"> <xsl:text> Car: </xsl:text> <xsl:value-of select="."/> <xsl:text> - </xsl:text> <xsl:value-of select="if (@geography = "North America") then "Domestic car" else if (@geography = "Europe") then "Import from Europe" else if (@geography = "Asia") then "It"s from Asia" (: If it"s anything else :) else "We don""t know!""/> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output:
Car: Alfa Romeo - Import from Europe Car: Bentley - Import from Europe Car: Chevrolet - Domestic car Car: Dodge - Domestic car Car: GMC - Domestic car Car: Honda - It"s from Asia Car: Isuzu - It"s from Asia Car: Quantum - We don"t know!</source>
The <xsl:if> Element: Conditional Processing
<source lang="xml">
The xsl:if element tests whether a Boolean condition is true or false. If it is true, then the content of the xsl:if element is instantiated. If it is false, then nothing specified inside the xsl:ifelement is added to the result tree. File: Data.xml <?xml version="1.0" encoding="ISO-8859-1"?> <sales>
<source> <title>Book</title> <url>http://www.wbex.ru</url> <amounts estimate="true" year="2002"/> </source> <nation> <name>USA</name> <capital>DC</capital> <amount>32277942</amount> <cc>dz</cc> </nation> <nation> <name>Canada</name> <capital>Ottwa</capital> <amount>6373002</amount> <cc>bi</cc> </nation> <nation> <name>Maxico</name> <capital>Maxico City</capital> <amount>4465651</amount> <cc>er</cc> </nation>
</sales>
File: Transform.xslt <?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" /> <xsl:template match="sales"> <xsl:apply-templates select="nation" /> </xsl:template> <xsl:template match="nation"> <xsl:text> * </xsl:text> <xsl:value-of select="name" /> <xsl:if test="amount > 10000000"> <xsl:text> (> 10M)</xsl:text> </xsl:if> <xsl:text> </xsl:text> </xsl:template>
</xsl:stylesheet> Output:
* USA (> 10M) * Canada * Maxico</source>
Use if statement to check whether it is the last
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="utf-8"?> <list>
<entry name="A"/> <entry name="B"/> <entry name="C"/> <entry name="D"/>
</list> File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="list"> <xsl:for-each select="entry"> <xsl:value-of select="@name"/> <xsl:if test="not (position()=last())"> <xsl:text>, </xsl:text> </xsl:if> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>A, B, C, D</source>
Use if statement to test if an element as an attribute
<source lang="xml">
File: Data.xml <?xml version="1.0" standalone="yes"?> <poem author="jm" year="1667">
<verse>line 1</verse> <verse>line 2</verse> <verse>line 3</verse> <verse>line 4</verse>
</poem> File: Transform.xslt <?xml version="1.0" standalone="yes"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="text" /> <xsl:template match="poem"> <xsl:if test="@year"> The poem has a flavor attribute. </xsl:if> </xsl:template>
</xsl:stylesheet> Output:
The poem has a flavor attribute.</source>
xsl:if instruction enables conditional processing
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="utf-8"?> <list>
<entry name="A"/> <entry name="B"/> <entry name="C"/> <entry name="D"/>
</list> File: Transform.xslt <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="list"> <xsl:for-each select="entry"> <xsl:value-of select="@name"/> <xsl:text>, </xsl:text> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>A, B, C, D,</source>