SAX: Help on processing qualified attribute values

M

Markus Doering

Hey,

I am trying to process XML schema documents using namespace aware SAX
handlers. Currently I am using the default python 2.3 parser:

parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces, 1)


At some point I need to parse xml attributes which contain namespace
prefixes as their value. For example:

<xs:element name="hello" type ="xs:string"/>

The default SAX parser does a good job on dealing with qualified names
as xml tags, but is there a way I can access the internal sax mapping
between prefixes and full namespaces to be able to parse "qualified
attribute values"? A simple private dictionary prefix2namespace would be
sufficient.
Or is there a way I can tell the parser to do so for me? I tried to keep
track of namespace declarations myself with the handler, but if you use
namespace aware parsing startElementNS() omits those declarations from
the resulting attribute list of that method.

Parsing the following XML bit:

<mapping xmlns:dwc="http://www.namespacetbd.org/darwin2" />

does not produce any attribute with startElementNS()

def startElementNS(self, name,qname,attrs):
print "Name:%s QName=%s, Attributes=%s"%(unicode(name),unicode(qname),
unicode(["%s=%s"%(k,v) for k,v in attrs.items()]) )

results in

Name:(None, u'mapping') QName=mapping, Attributes=[]


Should I maybe try another parser than the default one (Expat?)

Thanks for any help,
Markus
 
U

Uche Ogbuji

Hey,

I am trying to process XML schema documents using namespace aware SAX
handlers. Currently I am using the default python 2.3 parser:

parser = xml.sax.make_parser()
parser.setFeature(xml.sax.handler.feature_namespaces, 1)


At some point I need to parse xml attributes which contain namespace
prefixes as their value. For example:

<xs:element name="hello" type ="xs:string"/>

The default SAX parser does a good job on dealing with qualified names
as xml tags, but is there a way I can access the internal sax mapping
between prefixes and full namespaces to be able to parse "qualified
attribute values"? A simple private dictionary prefix2namespace would be
sufficient.

Just for others, this was answered here:

http://mail.python.org/pipermail/xml-sig/2005-March/010989.html

I also provide a useful mix-in class for this purpose in Amara's
saxtools:

http://www.xml.com/pub/a/2005/01/19/amara.html
http://cvs.4suite.org/viewcvs/Amara/lib/saxtools.py?rev=1.9&view=markup

In the latter link see class namespace_mixin, which you should be
able to copy to your code if you don't want to install Amara).


--
Uche Ogbuji Fourthought, Inc.
http://uche.ogbuji.net http://4Suite.org http://fourthought.com
Use CSS to display XML, part 2 - http://www-128.ibm.com/developerworks/edu/x-dw-x-xmlcss2-i.html
Introducing the Amara XML Toolkit - http://www.xml.com/pub/a/2005/01/19/amara.html
Gems from the Mines: 2002 to 2003 - http://www.xml.com/pub/a/2005/03/02/pyxml.html
Be humble, not imperial (in design) - http://www.adtmag.com/article.asp?id=10286
Querying WordNet as XML - http://www.ibm.com/developerworks/xml/library/x-think29.html
Packaging XSLT lookup tables as EXSLT functions - http://www.ibm.com/developerworks/xml/library/x-tiplook2.html
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top