- Как перебрать все теги изображений с tree.iterfind и картой namsepace?
for img in root.iterfind('image', namespaces=root.nsmap):
- Я пытаюсь превратить теги изображений в теги использования.В то время как lxml дает мне словарь атрибутов с xlinx: href, он задыхается при передаче его в makeelement. Есть ли элегантное решение?
Любая из этих работ для меня:
img.makeelement('use', dict(img.items())
img.makeelement('use', img.attrib)
- Должен ли я использовать lxml или есть что-то лучшее (более прямолинейное)?
У всех есть свое мнение.Мне нравится lxml.Я нахожу это очень простым.Ваше мнение может отличаться.
Полная программа:
from lxml import etree
def inlineSvg(path):
parser = etree.XMLParser(recover=True)
tree = etree.parse(path, parser)
root = tree.getroot()
for img in root.iterfind('image', namespaces=root.nsmap):
use = img.makeelement('use', img.attrib, nsmap=root.nsmap)
print(etree.tostring(use))
inlineSvg('xx.svg')
Входной файл (xx.svg
):
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="10" y="10" height="130" width="500" style="fill: #000000"/>
<image x="20" y="20" width="300" height="80"
xlink:href="http://jenkov.com/images/layout/top-bar-logo.png" />
<line x1="25" y1="80" x2="350" y2="80"
style="stroke: #ffffff; stroke-width: 3;"/>
</svg>
Результат:
$ python xx.py
b'<use xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" height="80" width="300" x="20" y="20" xlink:href="http://jenkov.com/images/layout/top-bar-logo.png"/>'
Ссылка: