Я хочу выбрать первого ребенка конкретного элемента (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>