You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2008/11/02 22:05:03 UTC
svn commit: r709933 - in
/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers:
AbstractDOMParser.java DOMParserImpl.java
Author: mrglavas
Date: Sun Nov 2 13:05:02 2008
New Revision: 709933
URL: http://svn.apache.org/viewvc?rev=709933&view=rev
Log:
Fixing JIRA Issue #1335:
http://issues.apache.org/jira/browse/XERCESJ-1335
With an LSParserFilter, the rejection and skipping of nodes on startElement() malfunctioned
if an element in the subtree has the same name as the filtered node. This occurred because
the DOM parser used the name of the element to determine when it had reached the end of the
subtree. So that recursive structures are processed correctly we now use the element's depth.
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java?rev=709933&r1=709932&r2=709933&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java Sun Nov 2 13:05:02 2008
@@ -260,10 +260,10 @@
/** Base uri stack*/
protected final Stack fBaseURIStack = new Stack ();
- /** LSParserFilter: the QNAME of rejected element*/
- protected final QName fRejectedElement = new QName ();
+ /** LSParserFilter: tracks the element depth within a rejected subtree. */
+ protected int fRejectedElementDepth = 0;
- /** LSParserFilter: store qnames of skipped elements*/
+ /** LSParserFilter: store depth of skipped elements */
protected Stack fSkippedElemStack = null;
/** LSParserFilter: true if inside entity reference */
@@ -927,6 +927,7 @@
}
if (!fDeferNodeExpansion) {
if (fFilterReject) {
+ ++fRejectedElementDepth;
return;
}
Element el = createElementNode (element);
@@ -1034,15 +1035,20 @@
case LSParserFilter.FILTER_REJECT :
{
fFilterReject = true;
- fRejectedElement.setValues(element);
+ fRejectedElementDepth = 0;
return;
}
case LSParserFilter.FILTER_SKIP :
{
- fSkippedElemStack.push(element.clone());
+ fSkippedElemStack.push(Boolean.TRUE);
return;
}
- default : {}
+ default :
+ {
+ if (!fSkippedElemStack.isEmpty()) {
+ fSkippedElemStack.push(Boolean.FALSE);
+ }
+ }
}
}
}
@@ -1299,14 +1305,13 @@
if (fDOMFilter != null) {
if (fFilterReject) {
- if (element.equals (fRejectedElement)) {
+ if (fRejectedElementDepth-- == 0) {
fFilterReject = false;
}
return;
}
- if (!fSkippedElemStack.isEmpty ()) {
- if (fSkippedElemStack.peek ().equals (element)) {
- fSkippedElemStack.pop ();
+ if (!fSkippedElemStack.isEmpty()) {
+ if (fSkippedElemStack.pop() == Boolean.TRUE) {
return;
}
}
Modified: xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java?rev=709933&r1=709932&r2=709933&view=diff
==============================================================================
--- xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java (original)
+++ xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java Sun Nov 2 13:05:02 2008
@@ -291,7 +291,7 @@
if (fSkippedElemStack != null) {
fSkippedElemStack.removeAllElements();
}
- fRejectedElement.clear();
+ fRejectedElementDepth = 0;
fFilterReject = false;
fSchemaType = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org