我试图根据属性的内容在 SVG(字体)文件中查找 XML 元素,如下所示:
font = et.ElementTree(file='fontfile.svg')
glyph = font.find('//n:glyph[@unicode="%s"]' % symbol, namespaces={'n': SVGNS})
字形示例——我想要匹配的——是:
<glyph unicode="©" 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 = "©"
事实并非如此。我怀疑在匹配的一个方向上有 unicode 解释,但在另一个方向上没有。解决这个问题的正确方法是什么?
最佳答案
您可以使用 unicode 指定符号:symbol = u'\xa9'
import lxml.etree as ET
content = '''\
<root xmlns="SVGNS">
<glyph unicode="©" 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="©" horiz-adv-x="1792" d="M834 ... -40t-121 -18z "/>
关于Python lxml,SVG属性中的unicode匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418144/