dleslie     00/10/20 05:52:03

  Added:       java/samples/Trace foo.xml foo.xsl Trace.java
  Log:
  Added TraceListener and stylesheet PI samples.
  
  Revision  Changes    Path
  1.1                  xml-xalan/java/samples/Trace/foo.xml
  
  Index: foo.xml
  ===================================================================
  <upload>
    <day>
      <dow>tue</dow>
      <order>
        <line>
           <product>Belt</product>
           <price>5.54</price>
        </line>
      </order>
    </day>
    <day>
      <dow>wed</dow>
    </day>
    <day>
      <dow>thu</dow>
      <order>
        <line>
           <product>Boots</product>
           <price>9.23</price>
        </line>
      </order>
    </day>
    <day>
      <dow>fri</dow>
      <order>
      </order>
      <order>
      </order>
    </day>
    <day>
      <dow>sat</dow>
      <order>
        <line>
           <product>Jacket</product>
           <price>9.84</price>
        </line>
      </order>
    </day>
    <day>
      <dow>mon</dow>
      <order>
      </order>
      <order>
        <line>
           <product>Tie</product>
           <price>5.37</price>
        </line>
      </order>
    </day>
    <day>
      <dow>tue</dow>
    </day>
    <day>
      <dow>wed</dow>
      <order>
      </order>
    </day>
    <day>
      <dow>thu</dow>
      <order>
        <line>
           <product>Overalls</product>
           <price>3.16</price>
        </line>
      </order>
    </day>
  </upload>
  
  
  
  1.1                  xml-xalan/java/samples/Trace/foo.xsl
  
  Index: foo.xsl
  ===================================================================
  <xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0"
    xmlns="http://www.w3.org/TR/REC-html40";>
  
    <!-- FileName: misc-evans -->
    <!-- Document: http://www.w3.org/TR/xslt -->
    <!-- DocVersion: 19991116 -->
    <!-- Purpose: COPY of perf test;"A Practical Suggestion for XSLT 
Performance Improvement" by Clark Evans. -->
  
     <xsl:variable name="day-list" 
       select="//dow[not(.=following::dow)]" />
  
     <xsl:variable name="product-list" 
              select="//product[not(.=following::product)]" />
       
  <xsl:template match="/">
    <xsl:variable name="my-test"><a><b/></a></xsl:variable>
    <html>
      <xsl:copy-of select="$my-test"/>
      <body>
      <table>
        <tr>
          <td><xsl:text> </xsl:text></td>
          <xsl:for-each select="$day-list">
            <xsl:sort order="ascending" select="." />
            <th><xsl:value-of select="."/></th>
          </xsl:for-each>
        </tr>
        <xsl:for-each select="$product-list">
          <xsl:sort    order="ascending" select="." />
          <xsl:variable name="product" select="." />
          <tr>
            <td>
              <xsl:value-of select="$product" />
            </td>
            <xsl:for-each select="$day-list">
              <xsl:sort order="ascending" select="." />
              <xsl:variable name="day" select="." />
              <td>
                <xsl:value-of 
               select="sum(//price[../product=$product][../../../dow=$day])"
  /> .
              </td>
            </xsl:for-each>
            <td>
              <xsl:value-of 
                select="sum(//price[../product=$product])" /> .
             </td>
          </tr>
        </xsl:for-each>
        <tr>
          <td><xsl:text> </xsl:text></td>
          <xsl:for-each select="$day-list">
            <xsl:sort    order="ascending" select="." />
            <xsl:variable name="day" select="." />
            <td>
              <xsl:value-of 
                select="sum(//price[../../../dow=$day])" />
            </td>
          </xsl:for-each>
          <td>
            <xsl:value-of select="sum(//price)" />
          </td>
        </tr>
      </table>
      </body>
    </html>
  </xsl:template>
  </xsl:stylesheet>
  
  
  
  1.1                  xml-xalan/java/samples/Trace/Trace.java
  
  Index: Trace.java
  ===================================================================
  
  import org.apache.xalan.transformer.TransformerImpl;
  import org.apache.xalan.trace.TraceManager;
  import org.apache.xalan.trace.PrintTraceListener;
  
  public class Trace
  {     
    public static void main (String[] args)
          throws java.io.IOException, 
                         org.apache.trax.TransformException, 
org.apache.trax.ProcessorException,
                         java.util.TooManyListenersException, 
                         org.xml.sax.SAXException                        
    {
      // Set up a PrintTraceListener object to print to a file.
      java.io.FileWriter fw = new java.io.FileWriter("events.log");  
      java.io.PrintWriter pw = new java.io.PrintWriter(fw, true);
      PrintTraceListener ptl = new PrintTraceListener(pw);
  
      // Print information as each node is 'executed' in the stylesheet.
      ptl.m_traceElements = true;
      // Print information after each result-tree generation event.
      ptl.m_traceGeneration = true;
      // Print information after each selection event.
      ptl.m_traceSelection = true;
      // Print information whenever a template is invoked.
      ptl.m_traceTemplates = true;
  
      // Set up the transformation
      org.apache.trax.Processor processor = 
org.apache.trax.Processor.newInstance("xslt");
      org.apache.trax.Templates templates = processor.process
                               (new org.xml.sax.InputSource("foo.xsl"));
      org.apache.trax.Transformer transformer = templates.newTransformer();
  
      // Cast the Transformer object as TransformerImpl.
      if (transformer instanceof TransformerImpl) 
        {
        TransformerImpl transformerImpl = (TransformerImpl)transformer;
        // Register the TraceListener with a TraceManager associated 
        // with the TransformerImpl.
        TraceManager trMgr = transformerImpl.getTraceManager();
        trMgr.addTraceListener(ptl);
                       
        // Perform the transformation --printing information to
        // the events log during the process.
        transformer.transform
                           ( new org.xml.sax.InputSource("foo.xml"), 
                             new org.apache.trax.Result(new 
java.io.FileWriter("foo.out")) );
      }
      // Close the PrintWriter and FileWriter.
      pw.close();
      fw.close();
    }
  }
  
  

Reply via email to