gpt4 book ai didi

Python lxml解析svg文件

转载 作者:太空狗 更新时间:2023-10-30 00:59:33 24 4
gpt4 key购买 nike

我正在尝试从 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"(处于不同深度级别)中的汉字(日语字符)。

问题

  1. 是否使用了 lxml 错误的包?
  2. 如果没有,我该如何从已解析的 .svg 文件中提取信息?

其他解决方案

  • 我当然可以,我可以将文件作为字符串读取并搜索对于 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"))

关于Python lxml解析svg文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40469870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com