LINUX.ORG.RU

Namespace в xml.etree

 ,


0

1

Python, etree.

Есть xml, в котором только одно NS на весь документ. Можно как-то подавлять вывод NS при выводе tagname.tag? Получается примерно такое: {NS}tagname.

Или например при использовании tagname.find(name)? Надо вызывать tagname.find(NS + name)

Имеется ввиду не костыльные методы. Пример сорца:

import xml.etree.ElementTree as ET
doc_tree = ET.parse(filename)
root = doc_tree.getroot()
for child in root:
        print(child.tag)

★★

Последнее исправление: greek_31 (всего исправлений: 1)
Ответ на: комментарий от true_admin

С этим бегло ознакомился. Но ответа там так и не нашел. зы костыли свои написал уже, но хотелось как то по-правильному.

greek_31 ★★
() автор топика

нет нельзя. если нужно работать без неймспейсов, то родной питоновский ElementTree вам в руки, но мне кажется, это того не стоит — лучше сразу работать с неймспейсами.

AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

нет нельзя. если нужно работать без неймспейсов, то родной питоновский ElementTree вам в руки

Ну xml.etree, другого в моей поставке нет.

лучше сразу работать с неймспейсами

Там документ в котором только 1 ns и не добавляются новых. Более того, требуется только чтение.

greek_31 ★★
() автор топика
Ответ на: комментарий от greek_31

посмотри в исходники. Я когда-то наткнулся на:

1) когда-то оно было тупо захардкодено в сырцах

2) автор ElementTree писал что таков стандарт и нехрен больше открывать ему багрепорты на эту тему. Увы, сейчас с ходу этой инфы не нашёл.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

автор ElementTree писал что таков стандарт и нехрен больше открывать ему багрепорты на эту тему. Увы, сейчас с ходу этой инфы не нашёл.

и я считаю что он правильно говорит. сначала я тоже думал «какого чёрта», но потом, когда природа заставила думать в контексте неймспейсов, я понял, что lxml, с его форсированными неймспейсами, в этом смысле удобнее: на пример lxml.etree.TreeBuilder.start() имеет удобный параметр nsmap, а в xml.etree.ElementTree.TreeBuilder.start() такого параметра нет.

AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

да-да. всё правильно. я имел в виду xml.etree и xml.sax

в том смысле, что можно использовать xml.parsers.expat для парсинга без неймспейсов.

AGUtilities ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.