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());
+ }
}
}
}