Нежелательное объявление пространства имен в lxml XPath

Я хочу выбрать первого ребенка конкретного элемента (subelement), но пространство имен этого ребенка отличается от пространства имен родителя. Более того, этот ребенок может иметь любое пространство имен.

xml = '''<root xmlns="default_ns">
    <subelement>
        <!-- here we can have an element of any namespace  -->
        <some_prefix:a xmlns:some_prefix="some_namespace">
            <some_prefix:b/>
        </some_prefix:a>
    </subelement>
</root>'''
root = etree.fromstring(xml)
evaluator = etree.XPathEvaluator(root, namespaces={'def':'default_ns'})
child = evaluator.evaluate('//def:subelement/child::*')[0]
a_string = etree.tostring(child)
print a_string

Это дает:

<some_prefix:a xmlns:some_prefix="some_namespace" xmlns="default_ns">
    <some_prefix:b/>
</some_prefix:a>

но то, что я хочу получить, это дочерний элемент без объявления пространства имен от родителя xmlns="default_ns":

<some_prefix:a xmlns:some_prefix="some_namespace">
    <some_prefix:b/>
</some_prefix:a>
6
задан Marcin 28 February 2012 в 21:33
поделиться