在SVG文件中,我使用xpath
查找包含相对SVG路径的节点,例如
<path d="m -0.3,-0.3 l 0.6,0 l 0,0.6 l -0.6,0 l 0,-0.6 z" transform="translate(-1 -0.5)"/>
此节点的各个父节点一直到根
transform="translate(X Y)"
属性,用于确定上面相对路径的实际放置位置。捕获此路径/节点的父节点到root的正确/简洁/有效方法是什么,特别是那些具有“transform”属性的方法?
答案 0 :(得分:3)
使用
'ancestor::*[starts-with(@transform,"translate")]'
例如:
import lxml.etree as ET
content = '''
<bar transform="translate(1 1)">
<foo transform="translate(1 1)">
<path d="m -0.3,-0.3 l 0.6,0 l 0,0.6 l -0.6,0 l 0,-0.6 z" transform="translate(-1 -0.5)"/>
</foo>
</bar>
'''
doc = ET.fromstring(content)
for path in doc.xpath('//path'):
print(path.xpath('ancestor::*[starts-with(@transform,"translate")]'))
产量
[<Element bar at 0xb749448c>, <Element foo at 0xb7494504>]
答案 1 :(得分:2)
捕捉父母的正确/简洁/有效方法是什么? 路径/节点一直到根,特别是那些有 'transform'属性?
使用强>:
ancestor::*[@transform]
这将选择具有transform
属性的所有祖先元素。
可以直接选择祖先的所有transform
属性:
ancestor::*/@transform
如果您只对transform
属性感兴趣,其字符串值以字符串“translate(”(可能前面有空格)开头),请使用:
ancestor::*/@transform[starts-with(normalize-space(@transform),'translate(')]