我知道从以下格式的xml中获取值:
<note>
<col1>Tove</col1>
<col2>J</col2>
<test2>
<a> a </a>
<b> b </b>
<c> c </c>
<d> d </d>
</test2>
<code
a="1"
b="2"
c="3"
/>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
我提取的值如下:
for a in xmls.getiterator():
b = a.find("col1") # or col2
if b is not None:
print b.text #this helps in extracting the value
break
我的问题我需要在test2
和code
节点中提取值,但使用上述方法,我的输出为None
预期输出
理想情况如下所示,但获得a,b,c,d,1,2,3
等直接节点值最佳
<a> a </a>
<b> b </b>
<c> c </c>
<d> d </d>
and
a="1"
b="2"
c="3"
如果我们有目标节点名称,那么从xml中提取不同类型值的本机方法是什么?
相关:
答案 0 :(得分:1)
我会使用lxml.etree
,.xpath()
和.attrib
来获取属性值:
import lxml.etree as ET
data = """<note>
<col1>Tove</col1>
<col2>J</col2>
<test2>
<a> a </a>
<b> b </b>
<c> c </c>
<d> d </d>
</test2>
<code
a="1"
b="2"
c="3"
/>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
"""
tree = ET.fromstring(data)
for note in tree.xpath("//note"):
test2_values = [value.strip() for value in note.xpath(".//test2/*/text()")]
code_attrs = note.find("code").attrib
print(test2_values)
print(code_attrs)
这里,我们基本上迭代所有note
个节点(假设有多个节点),获取内部test2
节点下所有节点的文本以及code
节点的所有属性具有
打印:
['a', 'b', 'c', 'd']
{'b': '2', 'c': '3', 'a': '1'}