【问题标题】:Create SVG / XML document without ns0 namespace using Python ElementTree [duplicate]使用 Python ElementTree 创建没有 ns0 命名空间的 SVG / XML 文档 [重复]
【发布时间】:2011-04-23 04:42:38
【问题描述】:

我正在 Python 2.7 中使用 ElementTree 构建一个 SVG 文档。代码如下:

from xml.etree import ElementTree as etree

root = etree.XML('<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>')
root.append(etree.Element("path"))
root[0].set("d", "M1 1 L2 2 Z")
print etree.tostring(root, encoding='iso-8859-1')

这会生成输出:

<?xml version='1.0' encoding='iso-8859-1'?>
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg" height="100%" version="1.1" width="100%"><path d="M1 1 L2 2 Z" /></ns0:svg>

这不会被解析为有效的 SVG。 如何删除 ns0 命名空间?

【问题讨论】:

    标签: python xml svg


    【解决方案1】:

    我刚刚想通了,我无法删除问题所以这里是:

    etree.register_namespace("","http://www.w3.org/2000/svg")
    

    我认为这仅适用于 Python 2.7。

    【讨论】:

    • 回答你自己的问题比删除它要好得多。如果以后有人有这个问题,它已经被回答和索引了!
    • 如果您需要与较旧的 Python 兼容(或者即使您不需要),使用lxml.etree 可能会更好:这或多或少是xml.etree 提供的内容的超集。不过有一些外部依赖项。
    • lxml 因不能在 OS X 上开箱即用而臭名昭著。他们没有为英特尔 mac 提供预编译的 egg,并且尝试从头开始编译它非常困难。让它快速运行的唯一方法是使用 macports,我不认为这是可以接受的依赖项。
    • 作为谷歌搜索 python xml ns0 并得到您的答案的人,我非常感谢它没有被删除;)
    • @jfenwick,您将register-namespace 方法放在代码的哪个位置(在哪一行之后)?
    【解决方案2】:

    这是我使用 lxml 的方法。

    from lxml import etree
    svg_tree = etree.fromstring(svg_str, parser=etree.XMLParser())
    etree.tostring(svg_tree)
    

    这里使用的示例代码: lxml-removing-xml-tags-when-parsing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-12
      • 2020-10-17
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 2020-10-14
      相关资源
      最近更新 更多