XML/XSLT stylesheet/descendant — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Текущая версия на 11:26, 26 мая 2010
Содержание
descendant demo
<source lang="xml">
File: Data.xml <chapter>
<para>para1</para> <figure> <title>title 1</title> <graphic fileref="pic1.jpg" /> </figure> <para>para2</para> <sect1> <para>para3</para> <figure> <title>"He Lights"</title> <graphic fileref="pic2.jpg" /> </figure> <para>line 1</para> <sect2> <para>line 2</para> <figure> <title>title 2</title> <graphic fileref="pic1.jpg" /> </figure> </sect2> </sect1>
</chapter> File: Transform.xslt <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:output method="html" /> <xsl:template match="chapter"> <html> <body> Pictures:
<xsl:for-each select="descendant::figure"> <a href="#{generate-id(graphic)}"> <xsl:value-of select="title" /> </a>
</xsl:for-each> <xsl:apply-templates /> </body> </html> </xsl:template>
<xsl:template match="para">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="graphic">
<a name="{generate-id(.)}"> <img src="{@fileref}" /> </a> <xsl:value-of select="../title" />
</xsl:template> <xsl:template match="figure/title" />
</xsl:stylesheet>
Output: <html>
<body>Pictures:
<a href="#d2e11">title 1</a>
<a href="#d2e27">"He Lights"</a>
<a href="#d2e43">title 2</a>
para1
para2
para3
line 1
line 2
</body>
</html>
</source>
descendant::tag name
<source lang="xml">
File: Data.xml <chapter>
<para>para1</para> <figure> <title>title 1</title> <graphic fileref="pic1.jpg" /> </figure>
</chapter> 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> Pictures: <xsl:for-each select="descendant::figure"> <xsl:value-of select="title" /> <xsl:text/> </xsl:for-each> <xsl:apply-templates /> </chapter> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()" /> </xsl:copy> </xsl:template>
</xsl:stylesheet> Output: <chapter>
Pictures: title 1 <para>para1</para> <figure> <title>title 1</title> <graphic fileref="pic1.jpg"/> </figure>
</chapter>
</source>
select="descendant::figure/title[last()]"
<source lang="xml">
File: Data.xml <chapter>
<title>"title 1" Excerpt</title> <para>para1</para> <figure> <title>title 1</title> <graphic fileref="pic1.jpg" /> </figure>
</chapter> 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"> Last figure title in chapter? <xsl:value-of select="descendant::figure/title[last()]" /> No. </xsl:template>
</xsl:stylesheet> Output:
Last figure title in chapter? title 1 No. </source>
select="descendant::title[last()]"
<source lang="xml">
File: Data.xml <chapter>
<title>"title 1" Excerpt</title> <para>para1</para> <figure> <title>title 1</title> <graphic fileref="pic1.jpg" /> </figure>
</chapter> 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"> First title in chapter: <xsl:value-of select="descendant::title[1]" /> Last title in chapter: <xsl:value-of select="descendant::title[last()]" /> </xsl:template>
</xsl:stylesheet> Output:
First title in chapter: "title 1" Excerpt Last title in chapter: title 1 </source>
value-of select="descendant::lastName"
<source lang="xml">
File: Data.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Transform.xslt" type="text/xsl"?> <employees>
<head:header xmlns:head="http://www.domain.ru/namespace/header"> <title>Employee Data File</title> <maintainer>developer 1</maintainer> </head:header> <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>
Number | Last Name | First Name |
---|
</body> </html> </xsl:template> <xsl:template match="employee"> <tr> <xsl:for-each select="ancestor-or-self::*[@dept="programming"]"> <td> <xsl:number /> </td> <td> <xsl:value-of select="descendant::lastName" /> </td> <td> <xsl:value-of select="descendant::firstName" /> </td> <td> <xsl:value-of select="descendant::email" /> </td> </xsl:for-each> </tr> </xsl:template>
</xsl:stylesheet> Output: <html>
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Employee Output</title> </head> <body>
Number | Last Name | First Name | |
---|---|---|---|
1 | Smith | Joe | a@a.ru |
</body>
</html>
</source>