Python: анализировать SVG / XML с пространством имен - PullRequest
0 голосов
/ 24 июня 2019

Парсинг XML-файла (в данном случае svg) в Python удобен, но как только в файле есть пространства имен, ничего не работает.Почему у библиотеки xml в Python такое странное поведение?Что означает пространство имен для библиотеки Python?

Если бы у моего файла не было пространства имен, я мог бы легко сделать следующий код и получить все элементы:

import xml.etree.ElementTree as ET
tree = ET.parse('model1.svg')  
root = tree.getroot()
lst = root.findall('g/g/g/g')
print(lst)

Но так как у него есть пространство имен:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="temp" width="1809.6200256347656" height="1247.809829711914" version="1.1" viewBox="0 0 1809.6200256347656 1247.809829711914">

Ответ: []

Если я пытаюсь напечатать root, я получаю это:

<Element '{http://www.w3.org/2000/svg}svg' at 0x7fbc45154ea8>

вместо этого:

<Element 'svg' at 0x7f8ee9377368>

ТакЯ просто не могу с этим работать.Как я могу деактивировать / игнорировать это?

1 Ответ

0 голосов
/ 25 июня 2019

Решение заключается в использовании тегов xml (например, g) с префиксом из предварительно определенного массива пространства имен:

import xml.etree.ElementTree as ET
tree = ET.parse('./model1.svg')
root = tree.getroot()

ns_array = {
    'svg': 'http://www.w3.org/2000/svg', 
    'xlink': 'http://www.w3.org/1999/xlink'
    }

lst = root.findall('svg:g/svg:g/svg:g/svg:g', ns_array)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...