mkwan 2003/02/26 13:59:41
Modified: java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
SAXImpl.java
Log:
XSLTC_DTM performance work
Improvement for xsl:copy-of. Instead of using the expensive
getFirstAttribute()
and getFirstNamespace() interfaces, increase the element id by 1 to iterate
through all attribute and namespace nodes.
Revision Changes Path
No revision
No revision
1.1.2.34 +34 -6
xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java
Index: SAXImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java,v
retrieving revision 1.1.2.33
retrieving revision 1.1.2.34
diff -u -r1.1.2.33 -r1.1.2.34
--- SAXImpl.java 25 Feb 2003 19:14:50 -0000 1.1.2.33
+++ SAXImpl.java 26 Feb 2003 21:59:36 -0000 1.1.2.34
@@ -1758,8 +1758,8 @@
{
//final int type = getNodeType(node); //_type[node];
int nodeID = makeNodeIdentity(node);
- int exptype = _exptype2(nodeID);
- int type = _exptype2Type(exptype);
+ int eType = _exptype2(nodeID);
+ int type = _exptype2Type(eType);
switch(type)
{
@@ -1800,8 +1800,34 @@
if (type == DTM.ELEMENT_NODE)
{
// Start element definition
- final String name = copyElement(nodeID, exptype, handler);
+ final String name = copyElement(nodeID, eType, handler);
+
+ // %OPT% Increase the element ID by 1 to iterate through all
+ // attribute and namespace nodes.
+ int current = nodeID;
+ while (true)
+ {
+ current++;
+ type = _type2(current);
+
+ if (type == DTM.ATTRIBUTE_NODE)
+ {
+ final String uri = getNamespaceName(makeNodeHandle(current));
+ if (uri.length() != 0) {
+ final String prefix = getPrefix(makeNodeHandle(current));
+ handler.namespace(prefix, uri);
+ }
+ handler.attribute(getNodeName(makeNodeHandle(current)),
getNodeValue(makeNodeHandle(current)));
+ }
+ else if (type == DTM.NAMESPACE_NODE)
+ {
+ handler.namespace(getNodeNameX(makeNodeHandle(current)),
getNodeValue(makeNodeHandle(current)));
+ }
+ else
+ break;
+ }
// Copy element attribute
+ /*
for(int a=getFirstAttribute(node); a!=DTM.NULL;
a=getNextAttribute(a))
{
final String uri = getNamespaceName(a);
@@ -1818,10 +1844,12 @@
handler.namespace(getNodeNameX(a),
getNodeValue(a));
}
+ */
// Copy element children
- for(int c=getFirstChild(node); c!=DTM.NULL; c=getNextSibling(c))
- copy(c, handler);
+ for (int c = _firstch2(nodeID); c != DTM.NULL; c = _nextsib2(c))
+ copy(makeNodeHandle(c), handler);
+
// Close element definition
handler.endElement(name);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]