[
Lists Home |
Date Index |
Thread Index
]
- From: David Megginson <david@megginson.com>
- To: xml-dev@XML.ORG
- Date: Wed, 15 Mar 2000 07:08:06 -0500 (EST)
Box, Don writes:
> In trying to properly implement the in-scope namespaces Infoset
> property, I found the following inconvenience with SAX2. The
> ordering of startPrefixMapping and startElement requires the
> implementation of ContentHandler to either (a) create a new
> "scoping context" for each namespace declaration or (b) keep a data
> member around to note that a new element has started.
Yes, I understand the problem, but for most apps, it's more convenient
to know the mappings *before* the startElement event so that they can
process attribute values that are QNames.
Actually, I hadn't intended the NamespaceContext class to be used for
keeping track of this kind of information on the client side -- it was
meant only as a convenience class for driver writers, but that only
goes to show that users always think of new ways to use stuff. For
what you want to do, I think that a simple boolean flag is the best
approach:
class me implements DefaultHandler {
void startPrefixMapping(String p, String u) {
if (!contextPushed) {
ns.pushContext();
contextPushed = true;
}
ns.declarePrefix(p, u);
}
void startElement(...) {
if (!contextPushed) {
ns.pushContext();
}
contextPushed = false;
}
void endElement(...) {
ns.popContext();
}
boolean contextPushed = false;
}
This doesn't add much complexity for your case, but keeps things easy
for people who just want to process QNames in attribute values.
All the best,
David
--
David Megginson david@megginson.com
http://www.megginson.com/
***************************************************************************
This is xml-dev, the mailing list for XML developers.
To unsubscribe, mailto:majordomo@xml.org&BODY=unsubscribe%20xml-dev
List archives are available at http://xml.org/archives/xml-dev/
***************************************************************************
|