XML/XSLT stylesheet/node

Материал из Web эксперт
Перейти к: навигация, поиск

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>