XML/XSLT stylesheet/descendant or self
Версия от 21:22, 25 мая 2010; (обсуждение)
descendant-or-self demo
<source lang="xml">
File: Data.xml <chapter author="jm">
<para>para1</para> <para author="ar">para2</para> <sect1 author="bd"> <para>para3</para> <para>line 1</para> <sect2 author="jm"> <para>line 2</para> </sect2> </sect1>
</chapter> File: Transform.xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"> <xsl:template match="chapter"> <chapter> Authors <xsl:for-each select="descendant-or-self::*/@author"> <xsl:value-of select="." /> <xsl:text/> </xsl:for-each> <xsl:apply-templates /> </chapter> </xsl:template>
</xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?><chapter>
Authors jmarbdjm para1 para2 para3 line 1 line 2
</chapter>
</source>
select="descendant-or-self::*[@dept="programming"]"
<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>J</firstName> <middleName int="B">B</middleName> <lastName>S</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="descendant-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 | S | J | a@a.ru |
</body>
</html>
</source>