使用 Python 的 lxml 通过 id 查找并替换 XML/SVG 元素文本?

发布于 2024-11-27 07:36:18 字数 405 浏览 0 评论 0原文

我是 XML 和 lxml 的新手,希望使用 SVG 作为图形模板并以编程方式替换一些元素(图像中的标签)。 为此,我使用 Inkscape 创建了一个 SVG 文件,但是,lxml 似乎无法处理 Inkscape 使用的 svg:namespaces。保存为普通 SVG 有效:

from lxml import etree
ifilename = "ifile.svg"
with open( ifilename, 'r') as infile: 
    tree = etree.parse( infile )
print tree.xpath("//text[@id='findme']/tspan/text()")

但我不确定 xpath 是否是在元素树中的任何位置查找元素的正确方法!?我很感激能朝正确的方向推动。

I'm new to XML and lxml and would like to use SVG as graphics template and programatically replace some elements (labels in the image).
For this, I have created an SVG file with Inkscape, however, lxml seems not to be able to handle the svg:namespaces used by Inkscape. Saving as plain SVG works:

from lxml import etree
ifilename = "ifile.svg"
with open( ifilename, 'r') as infile: 
    tree = etree.parse( infile )
print tree.xpath("//text[@id='findme']/tspan/text()")

But I am not sure whether xpath is the right method to find an element at any position in the element tree!? I'd appreciate a nudge in the right direction.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烙印 2024-12-04 07:36:18

您应该能够使用

print tree.xpath("//n:text[@id='findme']/n:tspan/text()",
                 namespaces={'n': "http://www.w3.org/2000/svg"})

如果它不起作用,请向我们展示 SVG 标记。我不确定你所说的“保存为普通 SVG 有效”是什么意思。

You should be able to use

print tree.xpath("//n:text[@id='findme']/n:tspan/text()",
                 namespaces={'n': "http://www.w3.org/2000/svg"})

If it doesn't work, please show us the SVG markup. I'm not sure what you mean by "saving as plain SVG works".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文