mkwan 2003/02/27 07:49:37
Modified: java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
SAXImpl.java
Log:
XSLTC_DTM performance work
Minor cleanup to SAXImpl.copy() and copyElement(). Introduce a new interface
handleTextEvents() to handle Text nodes more efficiently.
Revision Changes Path
No revision
No revision
1.1.2.35 +64 -57
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.34
retrieving revision 1.1.2.35
diff -u -r1.1.2.34 -r1.1.2.35
--- SAXImpl.java 26 Feb 2003 21:59:36 -0000 1.1.2.34
+++ SAXImpl.java 27 Feb 2003 15:49:37 -0000 1.1.2.35
@@ -1113,7 +1113,7 @@
if (_preserve)
return false;
else
- return super.getShouldStripWhitespace();
+ return super.getShouldStripWhitespace();
}
/**
@@ -1724,6 +1724,25 @@
}
}
}
+
+ /**
+ * Copy the string value of a Text node directly to an output handler
+ * %REVISIT% Move this interface to SAX2DTM2 with the new serializer.
+ */
+ public void handleTextEvents(final int nodeID, TransletOutputHandler
handler)
+ throws TransletException
+ {
+ if (nodeID != DTM.NULL) {
+ _ch2toh.setTOH(handler);
+ try {
+ int dataIndex = m_dataOrQName.elementAt(nodeID);
+ m_chars.sendSAXcharacters(_ch2toh,
m_data.elementAt(dataIndex),
+ m_data.elementAt(dataIndex + 1));
+ } catch (SAXException e) {
+ throw new TransletException(e);
+ }
+ }
+ }
/**
* Copy a node-set to an output handler
@@ -1763,42 +1782,48 @@
switch(type)
{
- case DTM.ROOT_NODE:
- case DTM.DOCUMENT_NODE:
- for(int c=getFirstChild(node); c!=DTM.NULL; c=getNextSibling(c))
- copy(c, handler);
- break;
- case DTM.PROCESSING_INSTRUCTION_NODE:
- copyPI(node, handler);
- break;
- case DTM.COMMENT_NODE:
- handler.comment(getStringValueX(node));
- break;
- case DTM.TEXT_NODE:
- boolean oldEscapeSetting = false;
- boolean escapeBit = false;
+ case DTM.ROOT_NODE:
+ case DTM.DOCUMENT_NODE:
+ for(int c = _firstch2(nodeID); c != DTM.NULL; c = _nextsib2(c))
+ copy(makeNodeHandle(c), handler);
+ break;
+ case DTM.PROCESSING_INSTRUCTION_NODE:
+ copyPI(node, handler);
+ break;
+ case DTM.COMMENT_NODE:
+ handler.comment(getStringValueX(node));
+ break;
+ case DTM.TEXT_NODE:
+ boolean oldEscapeSetting = false;
+ boolean escapeBit = false;
- if (_dontEscape != null) {
+ if (_dontEscape != null) {
escapeBit = _dontEscape.getBit(getNodeIdent(node));
if (escapeBit) {
oldEscapeSetting = handler.setEscaping(false);
}
- }
- characters(node, handler);
+ }
+ //characters(node, handler);
+ handleTextEvents(nodeID, handler);
- if (escapeBit) {
+ if (escapeBit) {
handler.setEscaping(oldEscapeSetting);
- }
- break;
- case DTM.ATTRIBUTE_NODE:
- shallowCopy(node, handler);
- break;
- case DTM.NAMESPACE_NODE:
- shallowCopy(node, handler);
- break;
- default:
- if (type == DTM.ELEMENT_NODE)
- {
+ }
+ break;
+ case DTM.ATTRIBUTE_NODE:
+ final String attrURI = getNamespaceName(node);
+ if (attrURI.length() != 0) {
+ final String prefix = getPrefix(node);
+ handler.namespace(prefix, attrURI);
+ }
+ handler.attribute(getNodeName(node), getNodeValue(node));
+ break;
+ case DTM.NAMESPACE_NODE:
+ handler.namespace(getNodeNameX(node), getNodeValue(node));
+ break;
+ default:
+ if (type == DTM.ELEMENT_NODE)
+ {
// Start element definition
final String name = copyElement(nodeID, eType, handler);
@@ -1826,26 +1851,7 @@
else
break;
}
- // Copy element attribute
- /*
- for(int a=getFirstAttribute(node); a!=DTM.NULL;
a=getNextAttribute(a))
- {
- final String uri = getNamespaceName(a);
- if (uri.length() != 0) {
- final String prefix = getPrefix(a);
- handler.namespace(prefix, uri);
- }
- handler.attribute(getNodeName(a), getNodeValue(a));
- }
- for(int a = getFirstNamespaceNode(node, true);
- a != DTM.NULL;
- a = getNextNamespaceNode(node, a, true))
- {
- handler.namespace(getNodeNameX(a),
- getNodeValue(a));
- }
- */
-
+
// Copy element children
for (int c = _firstch2(nodeID); c != DTM.NULL; c = _nextsib2(c))
copy(makeNodeHandle(c), handler);
@@ -1910,7 +1916,8 @@
case DTM.DOCUMENT_NODE:
return EMPTYSTRING;
case DTM.TEXT_NODE:
- characters(node, handler);
+ //characters(node, handler);
+ handleTextEvents(nodeID, handler);
return null;
case DTM.PROCESSING_INSTRUCTION_NODE:
copyPI(node, handler);
@@ -1923,13 +1930,13 @@
getNodeValue(node)); //makeStringValue(node));
return null;
case DTM.ATTRIBUTE_NODE:
- final String uri = getNamespaceName(node);
- if (uri.length() != 0) {
+ final String uri = getNamespaceName(node);
+ if (uri.length() != 0) {
final String prefix = getPrefix(node); //
_prefixArray[_prefix[node]];
handler.namespace(prefix, uri);
- }
- handler.attribute(getNodeName(node), getNodeValue(node));
//makeStringValue(node));
- return null;
+ }
+ handler.attribute(getNodeName(node), getNodeValue(node));
//makeStringValue(node));
+ return null;
default:
final String uri1 = getNamespaceName(node);
if (uri1.length() != 0) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]