[英]Python lxml parsing svg file
我正在尝试从http://kanjivg.tagaini.net/解析.svg文件,但我无法成功提取内部信息。
编辑1 :(完整档案) http://www.filedropper.com/0f9ab
0f9ab.svg
的一部分如下所示:
<svg xmlns="http://www.w3.org/2000/svg" width="109" height="109" viewBox="0 0 109 109">
<g id="kvg:StrokePaths_0f9ab" style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;">
<g id="kvg:0f9ab" kvg:element="嶺">
<g id="kvg:0f9ab-g1" kvg:element="山" kvg:position="top" kvg:radical="general">
<path id="kvg:0f9ab-s1" kvg:type="㇑a" d="M53.26,9.38c0.99,0.99,1.12,2.09,1.12,3.12c0,0.67,0.06,8.38,0.06,13.01"/>
<path id="kvg:0f9ab-s2" kvg:type="㇄a"
</g>
</g>
</g>
我的.py文件:
import lxml.etree as ET
svg = ET.parse('0f9ab.svg')
print(svg) # <lxml.etree._ElementTree object at 0x7f3a2f659ec8>
# AttributeError: 'lxml.etree._ElementTree' object has no attribute 'tag'
print(svg.tag)
# TypeError: 'lxml.etree._ElementTree' object is not subscriptable
print(svg[0])
# TypeError: 'lxml.etree._ElementTree' object is not iterable
for child in svg:
print(child)
# None
print(svg.find("./svg"))
# []
print(svg.findall("//g"))
# []
print(svg.xpath("//g"))
我尝试了各种我能想到的操作,但没有任何东西从.svg文件中获取任何数据。 我想用kvg:element="kanji"
(它们处于不同的深度级别)提取汉字(日文字符)。
lxml
错误的包吗? kvg:element="
,但我想以正确的方式提取xml / svg。 xmltodict
,但是我的代码变得非常混乱,提取kvg:element
,因为它们处于不同的深度级别。 .parse()
返回一个ElementTree ,它表示整个树。 要查询单个节点,您需要一个Element ,很可能是树的根元素。
用以下代码替换部分代码:
xml = ET.parse('0f9ab.svg')
svg = xml.getroot()
print(svg) # <lxml.etree._ElementTree object at 0x7f3a2f659ec8>
而且我认为你会取得一些成功。
另请注意, .findall()
需要一个相对路径,在您的情况下,需要一个名称空间限定符:
print(svg.findall(".//{http://www.w3.org/2000/svg}g"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.