XML/XSLT stylesheet/node
Версия от 18:22, 25 мая 2010; (обсуждение)
match="@*|node()"
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="xml" omit-xml-declaration="yes" />
<xsl:template match="chapter | sect1 | sect2">
<xsl:copy>
<xsl:attribute name="uid">
<xsl:value-of select="generate-id(.)" />
</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Output:
<chapter uid="d2e1">
<para>para1</para>
<figure>
<title>title 1</title>
<graphic fileref="pic1.jpg"/>
</figure>
<para>para2</para>
<sect1 uid="d2e17">
<para>para3</para>
<figure>
<title>"He Lights"</title>
<graphic fileref="pic2.jpg"/>
</figure>
<para>line 1</para>
<sect2 uid="d2e33">
<para>line 2</para>
<figure>
<title>title 2</title>
<graphic fileref="pic1.jpg"/>
</figure>
</sect2>
</sect1>
</chapter>
node function: node()|@*
File: Data.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Transform.xslt" ?>
<html>
<head>
<title>A simple HTML page</title>
</head>
<body>
<h2>Venus</h2>
description
<ul>
<li><strong>Diameter</strong> 12104 km (7505 miles)</li>
<li><strong>Moons:</strong> 0</li>
<li><strong>Mean temperature:</strong> 482C (900F)</li>
<li><strong>Length of one day:</strong> 243.01 earth days</li>
<li><strong>Length of one year:</strong> 224.7 earth days</li>
</ul>
</body>
</html>
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="html" version="4.0" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="body">
<body>
<xsl:apply-templates/>
<hr/>
comments
</body>
</xsl:template>
</xsl:stylesheet>
Output:
<?xml-stylesheet type="text/xsl" href="Transform.xslt" ><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>A simple HTML page</title>
</head>
<body>
<h2>Venus</h2>
description
<ul>
<li><strong>Diameter</strong> 12104 km (7505 miles)
</li>
<li><strong>Moons:</strong> 0
</li>
<li><strong>Mean temperature:</strong> 482C (900F)
</li>
<li><strong>Length of one day:</strong> 243.01 earth days
</li>
<li><strong>Length of one year:</strong> 224.7 earth days
</li>
</ul>
<hr>
comments
</body>
</html>