XML/XSLT stylesheet/following sibling — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 11:26, 26 мая 2010
Содержание
following-sibling
<source lang="xml">
File: Data.xml <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 <xsl:stylesheet
version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="/"> <html> <head> <title>following-sibling axis.</title> </head> <body>
sibling axis demo.
<xsl:apply-templates select="/Employees/Person[1]/FirstName" /> </body> </html> </xsl:template> <xsl:template match="FirstName"> <xsl:for-each select="following-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>following-sibling axis.</title> </head> <body>
sibling axis demo.
<paragraph>LastName which contains the text "B". </paragraph> <paragraph>DateOfBirth which contains the text "2008-12-12". </paragraph> </body>
</html>
</source>
following-sibling demo
<source lang="xml">
File: Data.xml <wine grape="Cabernet">
<winery>shop 1</winery> <product>product 1</product> <year>1996</year> <prices date="12/1/01"> <list>13.99</list> <discounted>11.00</discounted> </prices>
</wine> 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="product"> xsl:value-of: <xsl:value-of select="following-sibling::*" /> xsl:copy-of: <xsl:copy-of select="following-sibling::*" /> </xsl:template> <xsl:template match="winery | year | prices | list | discounted " />
</xsl:stylesheet> Output:
xsl:value-of: 1996 xsl:copy-of: <year>1996</year><prices date="12/1/01"> <list>13.99</list> <discounted>11.00</discounted> </prices> </source>
following-sibling::node()[1][not(self::NL)]
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <PLAY>
<TITLE>Nothing</TITLE> <FM>
A
T
</FM> <PERSONAE> <TITLE>D</TITLE> <PERSONA>D</PERSONA> <PGROUP> <PERSONA>C</PERSONA> <PERSONA>B</PERSONA> <GRPDESCR>f</GRPDESCR> </PGROUP> <PERSONA>F</PERSONA> <PERSONA>H</PERSONA> <PERSONA>B</PERSONA> <PGROUP> <PERSONA>MARGARET</PERSONA> <PERSONA>URSULA</PERSONA> <GRPDESCR>gentlewomen attending on Hero.</GRPDESCR> </PGROUP> <PERSONA>Messengers, Watch, Attendants, &c.</PERSONA> </PERSONAE>
</PLAY> File: Transform.xslt <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"> <xsl:template match="SCENE"> <xsl:variable name="flat"> <NL /> <xsl:apply-templates mode="phase1" /> </xsl:variable> <xsl:apply-templates select="$flat/NL[following-sibling::node()]" mode="phase2" /> </xsl:template> <xsl:template match="SPEECH" mode="phase1"> <speaker> <xsl:value-of select="SPEAKER" /> </speaker> <xsl:copy-of select="node() except SPEAKER" /> </xsl:template> <xsl:template match="NL" mode="phase2"> <line> <xsl:apply-templates select="following-sibling::node()[1][not(self::NL)]" mode="phase2" /> </line> </xsl:template> <xsl:template match="node()" mode="phase2"> <xsl:copy-of select="." /> <xsl:apply-templates select="following-sibling::node()[1][not(self::NL)]" mode="phase2" /> </xsl:template>
</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?>
Nothing A T D D C B f F H B MARGARET URSULA gentlewomen attending on Hero. Messengers, Watch, Attendants, &c. </source>
select="following-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> <employee eid="2" dept="training"> <contact addInfo="info2"> <name> <firstName>Sam</firstName> <middleName int="S">Stolte</middleName> <lastName>Williams</lastName> </name> <address> <street>1 St.</street> <city>Austin</city> <state>Texas</state> <zipcode>22222</zipcode> </address> <phone> <tel type="wk">512-3467899</tel> <tel type="hm">512-4623356</tel> <fax>512-3465655</fax> </phone> <email>s@s.ru</email> </contact> <hireDate>2000-03-11</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="following-sibling::*/contact/name/firstName"> <xsl:value-of select="following-sibling::*[1]/contact/name/firstName" /> </xsl:when> <xsl:otherwise>Nobody</xsl:otherwise> </xsl:choose> </xsl:variable>
The employee element node that is the following 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>
select="following-sibling::notification[count(preceding-sibling::employeeName[1] | current()) = 1]"
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <group>
<employeeName>Samson</employeeName> <notification>0001</notification> <notification>name 1</notification> <notification>0003</notification> <employeeName>Delihla</employeeName> <notification>0004</notification> <notification>0005</notification> <notification>0006</notification>
</group> File: Transform.xslt <?xml version = "1.0" encoding = "UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="html" indent="yes" /> <xsl:template match="/"> <xsl:apply-templates select="group" /> </xsl:template> <xsl:template match="group"> <xsl:for-each select="employeeName"> <tr> <td> <xsl:value-of select="." /> </td> <xsl:for-each select="following-sibling::notification[count(preceding-sibling::employeeName[1] | current()) = 1]"> <td> <xsl:value-of select="." /> </td> </xsl:for-each> </tr> </xsl:for-each> </xsl:template>
</xsl:stylesheet> Output: <tr>
<td>Samson</td> <td>0001</td> <td>name 1</td> <td>0003</td>
</tr> <tr>
<td>Delihla</td> <td>0004</td> <td>0005</td> <td>0006</td>
</tr>
</source>