lxml: удалить фиктивное пространство имен в выводе? - PullRequest
0 голосов
/ 24 июня 2018

Я использую lxml для генерации SVG. Рассмотрим следующий код:

import lxml.etree as Etree

Root = Etree.Element("svg", nsmap={None: "http://www.w3.org/2000/svg",
                                   "xlink": "http://www.w3.org/1999/xlink"})
Link = Etree.SubElement(Root, 'a')
Link.set("{xlink}href", "#")
Etree.SubElement(Link, "text", y="12").text = "test"

print(Etree.tostring(Root, encoding="utf-8", pretty_print=True,
                     xml_declaration=True).decode("utf-8"))

Это выводит

<?xml version='1.0' encoding='utf-8'?>
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
  <a xmlns:ns0="xlink" ns0:href="#">
    <text y="12">test</text>
  </a>
</svg>

Обратите внимание, что lxml создает «фиктивное» пространство имен ns0 и поместите в него href. Как я могу позволить lxml избавиться от него и просто вывести xlink:href?

1 Ответ

0 голосов
/ 26 июня 2018

При добавлении атрибута xlink:href необходимо использовать правильный URI пространства имен.

Изменить

Link.set("{xlink}href", "#")

до

Link.set("{http://www.w3.org/1999/xlink}href", "#")
...