У меня возникли проблемы с выбором определенного набора путей с использованием lxml. Структура SVG выглядит следующим образомВыберите пути SVG группы по идентификатору группы, используя lxml
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Created with matplotlib (http://matplotlib.org/) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="288pt" version="1.1" viewBox="0 0 432 288" width="432pt">
<defs>
<style type="text/css">
*{stroke-linecap:butt;stroke-linejoin:round;}
</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d=" M0 288 L432 288 L432 0 L0 0 z " style="fill:#ffffff;"/>
</g>
<g id="patch_2">
<path d=" M0 288 L432 288 L432 0 L0 0 z " style="fill:#ffffff;"/>
</g>
<g id="axes_1">
<g id="Poly3DCollection_1">
<path clip-path="url(#pe61355d493)" d=" M195.211 34.2225 L194.801 34.0894 L196.527 212.986 L196.909 212.999 z " style="fill:#0000ff;"/>
<path clip-path="url(#pe61355d493)" d=" M195.504 34.3231 L195.211 34.2225 L196.909 212.999 L197.184 213.022 z " style="fill:#0000ff;"/>
...
Ее путь, перечисленный в нижней части, что я хочу, чтобы выбрать и изменить свой стиль, но я не могу показаться, чтобы получить правильный синтаксис, и я не выбирать путь
ifilename = "myfig.svg"
with open(ifilename, 'r') as infile:
tree = etree.parse(infile)
elements = tree.findall(".//g[@id='Poly3DCollection_1'")
new_style = 'stroke-width:4px; stroke: linear-gradient(orange, darkblue)'
for child in elements:
child.attrib['style'] = new_style
mod_svg = 'myfigmod.svg'
tree.write(mod_svg)
EDIT
так что это заставляет меня элемент, я хочу в этом случае, но я все же хотел бы конкретный способ получения этого элемента
root = tree.getroot()
for child in root[1][2][0]:
child.attrib['style'] = new_style
[Похоже, вам не хватает пространства имен SVG] (http://stackoverflow.com/a/10494517/1572077) – miah
Я попытался добавить 'SVG_NS =«http://www.w3.org/2000/svg " elements = tree.findall (" .// g [@ id = 'Poly3DCollection_1'] ".format (SVG_NS))', но это не имеет никакого эффекта. – EnduroDave
Вы уронили ']' в своем определении xpath – miah