sboag       99/12/13 00:12:32

  Modified:    src/org/apache/xalan/xslt ElemValueOf.java
  Log:
  Added optimization for "." patterns.
  
  Revision  Changes    Path
  1.2       +74 -24    xml-xalan/src/org/apache/xalan/xslt/ElemValueOf.java
  
  Index: ElemValueOf.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/src/org/apache/xalan/xslt/ElemValueOf.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ElemValueOf.java  1999/11/08 20:56:29     1.1
  +++ ElemValueOf.java  1999/12/13 08:12:31     1.2
  @@ -69,6 +69,7 @@
      * The select pattern used to locate the value.
      */
     public XPath m_selectPattern = null;
  +  boolean isDot = false;
   
     /**
      * Tells if this element should disable escaping.
  @@ -96,8 +97,12 @@
         switch(tok)
         {
         case Constants.TATTRNAME_SELECT:
  -        m_selectPattern 
  -          = m_stylesheet.createXPath(atts.getValue(i), this);
  +        {
  +          String val = atts.getValue(i);
  +          isDot = val.equals(".");
  +          m_selectPattern 
  +            = m_stylesheet.createXPath(val, this);
  +        }
           break;
         case Constants.TATTRNAME_DISABLE_OUTPUT_ESCAPING:
           m_disableOutputEscaping = m_stylesheet.getYesOrNo(aname, 
atts.getValue(i));
  @@ -130,35 +135,80 @@
              SAXException
     {    
       super.execute(processor, sourceTree, sourceNode, mode);
  -    XObject value = m_selectPattern.execute(processor.getExecContext(), 
sourceNode, this);
  -    
  -    if(null != m_stylesheet.m_stylesheetRoot.m_traceListeners)
  +    if(isDot)
       {
  -      m_stylesheet.m_stylesheetRoot.fireSelectedEvent(new 
SelectionEvent(processor, 
  -                                                                         
sourceNode,
  -                                                                         
this, 
  -                                                                         
"select",
  -                                                                         
m_selectPattern,
  -                                                                         
value));
  +      String s;
  +      
  +      int t = sourceNode.getNodeType();
  +      if(((Node.COMMENT_NODE ==t) || 
  +          (Node.PROCESSING_INSTRUCTION_NODE == t)))
  +      {
  +        s = sourceNode.getNodeValue();
  +      }
  +      else
  +      {
  +        s = 
org.apache.xalan.xpath.xml.XMLParserLiaisonDefault.getNodeData(sourceNode);
  +      }
  +
  +      if(null != m_stylesheet.m_stylesheetRoot.m_traceListeners)
  +      {
  +        m_stylesheet.m_stylesheetRoot.fireSelectedEvent(new 
SelectionEvent(processor, 
  +                                                                           
sourceNode,
  +                                                                           
this, 
  +                                                                           
"select",
  +                                                                           
m_selectPattern,
  +                                                                           
new XString(s)));
  +      }
  +      
  +      if(null != s)
  +      {
  +        int len = s.length();
  +        if(len > 0)
  +        {
  +          if(!m_disableOutputEscaping)
  +          {
  +            processor.m_resultTreeHandler.characters(s.toCharArray(), 0, 
s.length());
  +          }
  +          else
  +          {
  +            processor.m_resultTreeHandler.charactersRaw(s.toCharArray(), 0, 
s.length());
  +          }
  +        }
  +      }
  +
       }
  -    if(null != value)
  +    else
       {
  -      int type = value.getType();
  -      if(XObject.CLASS_NULL != type)
  +      XObject value = m_selectPattern.execute(processor.getExecContext(), 
sourceNode, this);
  +      
  +      if(null != m_stylesheet.m_stylesheetRoot.m_traceListeners)
  +      {
  +        m_stylesheet.m_stylesheetRoot.fireSelectedEvent(new 
SelectionEvent(processor, 
  +                                                                           
sourceNode,
  +                                                                           
this, 
  +                                                                           
"select",
  +                                                                           
m_selectPattern,
  +                                                                           
value));
  +      }
  +      if(null != value)
         {
  -        String s = value.str();
  -        if(null != s)
  +        int type = value.getType();
  +        if(XObject.CLASS_NULL != type)
           {
  -          int len = s.length();
  -          if(len > 0)
  +          String s = value.str();
  +          if(null != s)
             {
  -            if(!m_disableOutputEscaping)
  -            {
  -              processor.m_resultTreeHandler.characters(s.toCharArray(), 0, 
s.length());
  -            }
  -            else
  +            int len = s.length();
  +            if(len > 0)
               {
  -              processor.m_resultTreeHandler.charactersRaw(s.toCharArray(), 
0, s.length());
  +              if(!m_disableOutputEscaping)
  +              {
  +                processor.m_resultTreeHandler.characters(s.toCharArray(), 0, 
s.length());
  +              }
  +              else
  +              {
  +                processor.m_resultTreeHandler.charactersRaw(s.toCharArray(), 
0, s.length());
  +              }
               }
             }
           }
  
  
  

Reply via email to