mkwan 2003/03/21 10:37:54
Modified: java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM
SAXImpl.java
java/src/org/apache/xml/dtm/ref/sax2dtm Tag: XSLTC_DTM
SAX2DTM2.java
Log:
XSLTC_DTM performance work
Introduce a copyAttribute() method in SAXImpl to speed up
attribute copying.
Revision Changes Path
No revision
No revision
1.1.2.45 +46 -20 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.44
retrieving revision 1.1.2.45
diff -u -r1.1.2.44 -r1.1.2.45
--- SAXImpl.java 18 Mar 2003 16:24:32 -0000 1.1.2.44
+++ SAXImpl.java 21 Mar 2003 18:37:54 -0000 1.1.2.45
@@ -1905,12 +1905,7 @@
}
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));
+ copyAttribute(nodeID, eType, handler);
break;
case DTM.NAMESPACE_NODE:
handler.namespace(getNodeNameX(node), getNodeValue(node));
@@ -1927,16 +1922,12 @@
while (true)
{
current++;
- type = _type2(current);
+ eType = _exptype2(current);
+ type = _exptype2Type(eType);
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)));
+ copyAttribute(current, eType, handler);
}
else if (type == DTM.NAMESPACE_NODE)
{
@@ -2024,12 +2015,7 @@
getNodeValue(node)); //makeStringValue(node));
return null;
case DTM.ATTRIBUTE_NODE:
- 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));
+ copyAttribute(nodeID, exptype, handler);
return null;
default:
final String uri1 = getNamespaceName(node);
@@ -2086,6 +2072,46 @@
handler.namespace(prefix, uri);
return qName;
}
+ }
+
+ // %REVISIT% This interface can be moved to SAX2DTM2 with the new serializer.
+ private void copyAttribute(int nodeID, int exptype,
+ TransletOutputHandler handler)
+ throws TransletException
+ {
+ /*
+ 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)));
+ */
+ final ExtendedType extType = m_extendedTypes[exptype];
+ final String uri = extType.getNamespace();
+ final String localName = extType.getLocalName();
+
+ String prefix = null;
+ String qname = null;
+ int dataIndex = _dataOrQName(nodeID);
+ int valueIndex = dataIndex;
+ if (uri.length() != 0) {
+ if (dataIndex <= 0) {
+ int prefixIndex = m_data.elementAt(-dataIndex);
+ valueIndex = m_data.elementAt(-dataIndex+1);
+ qname = m_valuesOrPrefixes.indexToString(prefixIndex);
+ int colonIndex = qname.indexOf(':');
+ if (colonIndex > 0) {
+ prefix = qname.substring(0, colonIndex);
+ }
+ }
+ handler.namespace(prefix, uri);
+ }
+
+ String nodeName = (prefix != null) ? qname : localName;
+ String nodeValue = (String)m_values.elementAt(valueIndex);
+
+ handler.attribute(nodeName, nodeValue);
}
/**
No revision
No revision
1.1.2.30 +1 -1
xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java
Index: SAX2DTM2.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/sax2dtm/Attic/SAX2DTM2.java,v
retrieving revision 1.1.2.29
retrieving revision 1.1.2.30
diff -u -r1.1.2.29 -r1.1.2.30
--- SAX2DTM2.java 21 Mar 2003 16:51:50 -0000 1.1.2.29
+++ SAX2DTM2.java 21 Mar 2003 18:37:54 -0000 1.1.2.30
@@ -1820,7 +1820,7 @@
// DTMStringPool because we can save the cost for hash calculation.
//
// %REVISIT% Do we need a custom class (e.g. StringVector) here?
- private Vector m_values;
+ protected Vector m_values;
// The current index into the m_values Vector.
private int m_valueIndex = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]