Python lxml,SVG属性中的unicode匹配

标签 python xml svg lxml

我试图根据属性的内容在 SVG(字体)文件中查找 XML 元素,如下所示:

font = et.ElementTree(file='fontfile.svg')
glyph = font.find('//n:glyph[@unicode="%s"]' % symbol, namespaces={'n': SVGNS})

字形示例——我想要匹配的——是:

<glyph unicode="&#xa9;" horiz-adv-x="1792" d="M834 ... -40t-121 -18z " />
<glyph unicode="C" horiz-adv-x="1509" d="M1766 338q-49 ... 83.5v-215z" />

问题是,例如,

symbol = "C"

它工作正常(有匹配),但是当

symbol = "&#xa9;"

事实并非如此。我怀疑在匹配的一个方向上有 unicode 解释,但在另一个方向上没有。解决这个问题的正确方法是什么?

最佳答案

您可以使用 unicode 指定符号:symbol = u'\xa9'

import lxml.etree as ET

content = '''\
<root xmlns="SVGNS">
<glyph unicode="&#xa9;" horiz-adv-x="1792" d="M834 ... -40t-121 -18z " />
<glyph unicode="C" horiz-adv-x="1509" d="M1766 338q-49 ... 83.5v-215z" />
</root>'''

font = ET.fromstring(content)
symbol = u'\xa9'
for glyph in font.xpath(u'//n:glyph[@unicode="%s"]'%symbol,  namespaces={'n': 'SVGNS'}):
    print(ET.tostring(glyph))

产量

<glyph xmlns="SVGNS" unicode="&#xA9;" horiz-adv-x="1792" d="M834 ... -40t-121 -18z "/>

关于Python lxml,SVG属性中的unicode匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418144/

相关文章:

xml - 从 zip 中解码特定的 XML 文件而不提取

vue.js - 在 Vue 组件中将样式元素添加到 SVG

firefox - 在 <path> 上使用时,SVG <pattern> <image> 在 Firefox 中不会缩放

Python 类实例算术

python - 创建数据框子集的散点图

python - 使用 tweepy 从用户时间轴中获取重复的推文

java - 如何将书籍的引用转换为 XML?

c++ - XML 编辑/替换的好选择

html - SVG - 在响应线中拉伸(stretch)的圆

python - Jinja2 模板未正确呈现 if-elif-else 语句