什么是BeautifulSoup4添加到我的SVG标签中?

认真地

当我使用BeautifulSoup4加载和转储非常简单的Inkscape SVG文件时,顶级SVG标签名称将:svg附加到该文件中,而XML声明不再具有standalone="no"这导致W3C XML验证器抱怨:

找不到DOCTYPE!仅检查XML语法。

这里到底发生了什么,为什么它会改变验证结果?如何在仍然可以操作的同时保留SVG文件的原始结构?

重现此代码是:

Python 3.3.0 (default, Sep 25 2013, 19:28:08) 
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from bs4 import BeautifulSoup
>>> with open('ex.svg') as ip: doc = BeautifulSoup(ip, 'xml')
... 
>>> with open('out.svg', 'w') as op: op.write(doc.prettify())
... 
560
>>> 

原始SVG文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="0"
   height="0"
   id="template-svg"
   version="1.1"
   inkscape:version="0.48.4 r"
   sodipodi:docname="template.svg">
</svg>

输出(手动美化一下):

<?xml version="1.0" encoding="utf-8"?>
<svg:svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="0"
   height="0"
   id="template-svg"
   version="1.1"
   inkscape:version="0.48.4 r"
   sodipodi:docname="template.svg">
</svg:svg>

顶级SVG标签名称将:svg附加到该名称

确切地在这里发生了,为什么它会更改验证结果?

这不完全是这里发生的事情。命名空间前缀正在改变,从无到有:

<svg
   ...
   xmlns="http://www.w3.org/2000/svg"

svg

<svg:svg
   ...
   xmlns:svg="http://www.w3.org/2000/svg"

您的原始文档为SVG命名空间定义了两个单独的前缀:

xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"

您可能会发现删除第一个会导致输出始终使用原始svg:前缀(根据实验,会选择一个随机前缀)。

对于大多数XML使用者而言,此更改应该不会有任何区别,但您使用的验证器会引起您的注意。

为了更好地控制,请考虑使用lxml的BeautifulSoup解析器以及类似的解决方法,以便在输出中为此名称空间设置空前缀。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么BeautifulSoup将<html> <body> <p>添加到我的结果中?

我如何在Promises中将密钥添加到我的div标签中

python beautifulsoup将html标签添加到svg

无法将CSS类添加到我的JavaFX标签中

如何将带有ID标签的图例添加到我的代码中

为什么我不能在golang中将主库添加到我的库中?

为什么我的图像没有添加到我的JButton中?

什么是原型,为什么将它们添加到我的json对象中

为什么将pod中的文件添加到我的覆盖率报告中?

为什么Kubuntu将.directoy文件添加到我的目录中?

为什么不能将项目添加到我的向量中?

为什么在 PhpStorm 中没有目录/文件可以添加到我的范围?

为什么Protege将`xml`命名空间添加到我的本体中?

什么是$$ hashKey添加到我的JSON.stringify结果中

为什么Go将字节添加到我的字符串中?

猫鼬-这个额外的_id属性被添加到我的友谊属性中是什么?

什么是data-gr-cs-loaded =“ true”属性添加到我的代码中

为什么 Django 模板引擎将 myapp/myview 添加到我的 URL 中?

Swift:为什么在使用追加时没有元素添加到我的数组中?

为什么“ source〜/ .profile”不断添加到我的$ PATH中?

为什么将undefined添加到我的字符串中?

将jQuery插件添加到我的Rails 4应用程序中

有没有办法将 svg 添加到我的 img 标签?即使 svg 的路径是正确的,svg 也不会显示

在Java中将“ Circular”添加到我的数组中

字母未添加到我的数组中

元素未添加到我的数组列表中

将重复的键添加到我的字典中

无法将对象添加到我的列表中

将表格添加到我的Dojo代码中