XML Tutorial/XSLT stylesheet/id — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 11:26, 26 мая 2010
Содержание
- 1 Compare id
- 2 <xsl:value-of select="." />
- 3 Arizona
- 4 California
- 5 Montana
- 6 Nevada
- 7 Washington
- 8 Here is a test of the id()
- 9 id() takes a string as its argument and returns a node-set containing any node that has an attribute of type ID equal to the function"s argument
- 10 select by id()
- 11 The id function selects elements by their unique ID.
Compare id
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="US-ASCII"?> <?xml-stylesheet href="Transform.xslt" type="text/xsl"?> <uscities>
<western> <uscity state="Nevada">Las Vegas</uscity> <uscity state="Arizona">Phoenix</uscity> <uscity state="California">San Francisco</uscity> <uscity state="Nevada">Silver City</uscity> <uscity state="Washington">Seattle</uscity> <uscity state="Montana">Missoula</uscity> </western>
</uscities> 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="html" /> <xsl:key name="list" match="uscity" use="@state" /> <xsl:template match="/"> <html> <head> <title>Western State Cities</title> </head> <body> <xsl:for-each select="/uscities/western/uscity[generate-id(.)=generate-id(key("list", @state))]/@state"> <xsl:sort />
<xsl:value-of select="." />
-
<xsl:for-each select="key("list", .)">
<xsl:sort />
- <xsl:value-of select="." />
</xsl:for-each>
</xsl:for-each> </body> </html> </xsl:template>
</xsl:stylesheet> Output: <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Western State Cities</title> </head><body>
Arizona
- Phoenix
California
- San Francisco
Montana
- Missoula
Nevada
- Las Vegas
- Silver City
Washington
- Seattle
</body>
</html></source>
Here is a test of the id()
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <parts-list>
<component component-id="1111111"> <name>Book</name> <partref refid="1"/> <partref refid="2"/> <partref refid="3"/> <partref refid="4"/> <description> <partref refid="3"/>. </description> </component> <component component-id="5"> <name>name 1</name> <partref refid="6"/> <partref refid="7"/> <description> <partref refid="6"/> and a <partref refid="7"/>. </description> </component> <part part-id="6" supplier="4839"> <name>Pitter</name> <description> desc6 </description> </part> <part part-id="7" supplier="2983"> <name>Patter</name> <description> desc7 </description> </part> <part part-id="2" supplier="5910"> <name>Spanner</name> <description> You can"t fix anything without one. </description> </part> <supplier country="Great Britain" vendor-id="4839"> <name>A Inc.</name> </supplier> <supplier country="Germany" vendor-id="2983"> <name>D</name> </supplier> <supplier country="Great Britain" vendor-id="5910"> <name>U Ltd.</name> </supplier>
</parts-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:template match="/"> <xsl:text> Here is a test of the id() </xsl:text> <xsl:text>function in reverse: </xsl:text> <xsl:for-each select="/parts-list/part"> <xsl:text> </xsl:text> <xsl:value-of select="name"/> <xsl:text> (part #</xsl:text> <xsl:value-of select="@part-id"/> <xsl:text>) is used in these products: </xsl:text> <xsl:for-each select="/parts-list/component [partref/@refid=current()/@part-id]"> <xsl:value-of select="name"/> <xsl:if test="position() != last()"> <xsl:text> </xsl:text> </xsl:if> </xsl:for-each> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output:
Here is a test of the id()
function in reverse:
(part # ) is used in these products:</source>
id() takes a string as its argument and returns a node-set containing any node that has an attribute of type ID equal to the function"s argument
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <parts-list>
<component component-id="1111111"> <name>Book</name> <partref refid="1"/> <partref refid="2"/> <partref refid="3"/> <partref refid="4"/> <description> <partref refid="3"/>. </description> </component> <component component-id="5"> <name>name 1</name> <partref refid="6"/> <partref refid="7"/> <description> <partref refid="6"/> and a <partref refid="7"/>. </description> </component> <part part-id="6" supplier="4839"> <name>Pitter</name> <description> desc6 </description> </part> <part part-id="7" supplier="2983"> <name>Patter</name> <description> desc7 </description> </part> <part part-id="2" supplier="5910"> <name>Spanner</name> <description> You can"t fix anything without one. </description> </part> <supplier country="Great Britain" vendor-id="4839"> <name>A Inc.</name> </supplier> <supplier country="Germany" vendor-id="2983"> <name>D</name> </supplier> <supplier country="Great Britain" vendor-id="5910"> <name>U Ltd.</name> </supplier>
</parts-list> 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:text> Here is a test of the id() </xsl:text> <xsl:text>function: </xsl:text> <xsl:for-each select="/parts-list/component"> <xsl:text> </xsl:text> <xsl:value-of select="name"/> <xsl:text> (component #</xsl:text> <xsl:value-of select="@component-id"/> <xsl:text>) uses these parts: </xsl:text> <xsl:for-each select="id(partref/@refid)"> <xsl:value-of select="name"/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output:
Here is a test of the id() function:
Book (component #1111111) uses these parts: name 1 (component #5) uses these parts:</source>
select by id()
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="UTF-8"?> <provinces>
<province id="AB"> <name>Alberta</name> <abbreviation>AB</abbreviation> </province> <province id="BC"> <name>British Columbia</name> <abbreviation>BC</abbreviation> </province> <province id="MB"> <name>Manitoba</name> <abbreviation>MB</abbreviation> </province> <province id="NB"> <name>New Brunswick</name> <abbreviation>NB</abbreviation> </province>
</provinces>
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:output method="text" /> <xsl:template match="provinces"> <xsl:apply-templates select="id("NU")" /> </xsl:template> <xsl:template match="id("NU")"> <xsl:value-of select="name" /> </xsl:template>
</xsl:stylesheet></source>
The id function selects elements by their unique ID.
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="utf-8"?>
<chapter id="intro">Introduction</chapter> <chapter id="body"> <title id="t1">BODY</title> <text value="text1">text text text</text> </chapter> <chapter id="end">THE END</chapter>
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="/"> <paragraph> <xsl:value-of select="id("intro")"/> </P> <paragraph> <xsl:value-of select="id("body")/text"/> </P> <paragraph> <xsl:value-of select="id("text1")"/> </P> </xsl:template>
</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><P/><P/><P/></source>