Перебор внуков в XML Tree в Python - PullRequest
1 голос
/ 08 октября 2019

Вот что-то, что не работает, и я пытаюсь понять, почему. Кажется, я очень похож на xml.etree.ElementTree примеры из документации , поэтому я не совсем понимаю, что не так.

Допустим, у нас есть следующий XML-файл (очень упрощенный примерфайла шрифта SVG):

<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>Text</metadata>
<defs>
<font id="ID">
    <glyph glyph-name="G1" unicode="..." 
d="path" />
    <glyph glyph-name="G2" unicode="..." 
d="path" />
    <glyph glyph-name="G3" unicode="..." 
d="path" />
    <glyph glyph-name="G4" unicode="..." 
d="path" />
  </font>
</defs></svg>

Теперь, почему это ничего не возвращает?

In [1]: import xml.etree.ElementTree as ET
   ...:
   ...: tree = ET.parse('svg_font.xml')
   ...: root = tree.getroot()
   ...:
   ...: for glyph in root.findall('glyph'):
   ...:     print('Name: ' + glyph.attrib)
   ...:

In [2]:

Спасибо за то, что пролили немного света на это!

1 Ответ

0 голосов
/ 08 октября 2019

каждый тег должен быть разделен именами '{http://www.w3.org/2000/svg}' из-за этого объявления [xmlns = "http://www.w3.org/2000/svg"] внутри тега svg

, например, вместо' glyph 'use' {http://www.w3.org/2000/svg}glyph'

каждый тэг должен начинаться с префикса '{http://www.w3.org/2000/svg}'

alse, вместо' findall 'используйте' iter '! Замените цикл "for" следующим

for glyph in El.iter('{http://www.w3.org/2000/svg}glyph'):
    print('Name: ' + str(glyph.attrib))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...