ElementTree and namespaces in the header only

P

Peter Bengtsson

Here's my code (simplified):

NS_URL = 'http://www.snapexpense.com/atom_ns#'
ElementTree._namespace_map[NS_URL] = 'se'
def SEN(tag):
return "{%s}%s" % (NS_URL, tag)

root = Element('feed', xmlns='http://www.w3.org/2005/Atom')
root.set('xmlns:se', NS_URL)
entry = SubElement(root, 'entry')
SubElement(root, 'title').text = 'Title'
SubElement(entry, SEN('category')).text = 'Category'


And here's the generated XML string:

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:se="http://
www.snapexpense.com/atom_ns#">
<entry>
<se:category xmlns:se="http://www.snapexpense.com/
atom_ns#">Category</se:category>
</entry>
<title>Title</title>
</feed>


But surely the xmlns:se attribute on the <se:category> tag is
excessive since the namespace (by the URI) is already defined in the
<feed> tag. How do I set non-default namespace tags in elements
without the automatic xmlns:se attribute repeated each time?
 
F

Fredrik Lundh

Peter said:
root = Element('feed', xmlns='http://www.w3.org/2005/Atom')
root.set('xmlns:se', NS_URL)
entry = SubElement(root, 'entry')
SubElement(root, 'title').text = 'Title'
SubElement(entry, SEN('category')).text = 'Category'
But surely the xmlns:se attribute on the <se:category> tag is
excessive since the namespace (by the URI) is already defined in the
<feed> tag. How do I set non-default namespace tags in elements
without the automatic xmlns:se attribute repeated each time?

ET 1.2's standard serializer doesn't take explicitly set namespaces into
account. If you want full control over namespace generation, you have
to do it yourself:

http://effbot.org/zone/element-namespaces.htm#explicitly-setting-namespace-attributes

ET 1.3 provides a default_namespace option for this specific case (but
you still have to use universal names for everything that should go into
the default namespace).

</F>
 
T

Torsten Bronger

Hallöchen!

Fredrik said:
ET 1.2's standard serializer doesn't take explicitly set namespaces
into account. If you want full control over namespace generation,
you have to do it yourself:

http://effbot.org/zone/element-namespaces.htm#explicitly-setting-namespace-attributes

ET 1.3 provides a default_namespace option for this specific case
(but you still have to use universal names for everything that
should go into the default namespace).

I've worked with Saxon for a couple of years, and it tries to
generate the "minimal" (well, sort of) XML file possible: It uses
the prefixes given in the source XSLT file rather than generating
something, and detects implicitly set namespaces, thus avoiding
spitting them out again. Wouldn't this be an option for ET, too?

Tschö,
Torsten.
 
P

Peter Bengtsson

ET 1.2's standard serializer doesn't take explicitly setnamespacesinto
account. If you want full control over namespace generation, you have
to do it yourself:

http://effbot.org/zone/element-namespaces.htm#explicitly-setting-name...

ET 1.3 provides a default_namespace option for this specific case (but
you still have to use universal names for everything that should go into
the default namespace).

</F>

That's perfect Fredrik. Exactly what I was looking for.
 

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

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top