XML/XSLT stylesheet/preceding sibling — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 11:26, 26 мая 2010
Содержание
preceding-sibling
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <Employees>
<Person> <FirstName>A</FirstName> <LastName>B</LastName> <DateOfBirth>2008-12-12</DateOfBirth> </Person> <Person> <FirstName>C</FirstName> <LastName>D</LastName> <DateOfBirth>2008-11-11</DateOfBirth> </Person> <Person> <FirstName>E</FirstName> <LastName>F</LastName> <DateOfBirth>2008-10-10</DateOfBirth> </Person>
</Employees>
File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>preceding-sibling axis.</title> </head> <body>
Preceding-sibling axis.
<xsl:apply-templates select="/Employees/Person[3]/DateOfBirth" /> </body> </html> </xsl:template> <xsl:template match="DateOfBirth"> <xsl:for-each select="preceding-sibling::*"> <paragraph> <xsl:value-of select="name(.)" /> which contains the text " <xsl:value-of select="." /> ". </paragraph> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>preceding-sibling axis.</title> </head> <body>
Preceding-sibling axis.
<paragraph>FirstName which contains the text " E ". </paragraph> <paragraph>LastName which contains the text " F ". </paragraph> </body>
</html>
</source>
preceding-sibling and following-sibling
<source lang="xml">
File: Data.xml <story>
<chapter> <title>Chapter 1</title> <para>para 1</para> </chapter> <chapter> <title>Chapter 2</title> <para>item 1</para> <para>item 2</para> <sect> <title>Chapter 2, Section 1</title> <para>item 3</para> <para>para 2</para> </sect> </chapter> <chapter> <title>Chapter 3</title> <para>para A</para> </chapter>
</story> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="xml" omit-xml-declaration="yes" indent="no" /> <xsl:template match="chapter"> <chapter> Previous chapter: ( <xsl:value-of select="preceding-sibling::chapter[1]/title" /> ) Next chapter: ( <xsl:value-of select="following-sibling::chapter/title" /> ) <xsl:text> </xsl:text> <xsl:apply-templates /> </chapter> </xsl:template>
</xsl:stylesheet> Output:
<chapter> Previous chapter: ( ) Next chapter: ( Chapter 2 ) Chapter 1 para 1 </chapter> <chapter> Previous chapter: ( Chapter 1 ) Next chapter: ( Chapter 3 ) Chapter 2 item 1 item 2 Chapter 2, Section 1 item 3 para 2 </chapter> <chapter> Previous chapter: ( Chapter 2 ) Next chapter: ( ) Chapter 3 para A </chapter> </source>
select="preceding-sibling::*[1]/contact/name/firstName"
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Transform.xslt" type="text/xsl"?> <employees xmlns="http://www.domain.ru/namespace/employee">
<title>Employee Data File</title> <employee eid="1" dept="programming"> <contact addInfo="info1"> <name> <firstName>Joe</firstName> <middleName int="B">Brian</middleName> <lastName>Smith</lastName> </name> <address> <street>1 Drive</street> <city>Vancouver</city> <state>BC</state> <zipcode>80210</zipcode> </address> <phone> <tel type="wk">111-1111111</tel> <tel type="hm">222-222222</tel> <fax>303-4667357</fax> </phone> <email>a@a.ru</email> </contact> <hireDate>2008-10-29</hireDate> </employee>
</employees> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="html" indent="yes" /> <xsl:template match="/"> <html> <head> <title>Employee Output</title> </head> <body> <xsl:apply-templates select="employees/employee" /> </body> </html> </xsl:template> <xsl:template match="employee"> <xsl:variable name="choose"> <xsl:choose> <xsl:when test="preceding-sibling::*/contact/name/firstName"> <xsl:value-of select="preceding-sibling::*[1]/contact/name/firstName" /> </xsl:when> <xsl:otherwise>Nobody</xsl:otherwise> </xsl:choose> </xsl:variable>
The employee element node that is the preceding sibling of <xsl:value-of select="self::*/contact/name/firstName" /> is for the following staff member: <xsl:value-of select="$choose" />
</xsl:template>
</xsl:stylesheet> Output: <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Employee Output</title> </head> <body></body>
</html>
</source>