[英]How can I extract xml value @ attribute = something from python
例如,这是我的xml
<p1>
<p2>
<name>nikki</name>
<p3>
<c days="1">1</c>
<c days="3">5</c>
<c days="7">9</c>
</p3>
</p2>
</p1>
到目前为止,我能够使用name = etree.XPath('/p1/p2/name/text()')(root)[0]
提取名称但是如何提取day1,day3和day7以获得值1,5 ,7 ??
这是我使用import etree的代码
name = etree.XPath('/p1/p2/name/text()')(root)[0]
?? day1 = etree.XPath('/p1/p2/p3/c@days="1"/text()')(root)[0]
?? day3 = etree.XPath('/p1/p2/p3/c@days="3"/text()')(root)[0]
?? day7 = etree.XPath('/p1/p2/p3/c@days="7"/text()')(root)[0]
print name , day1 , day2, day7
OUTPUT WANTED: nikki 1 5 9
ElementTree元素的text
属性将为您提供元素标记之间的值。 所以:
print name, day1.text, day2.text, day7.text
应该给你你预期的输出。
这是ElementTree Element的文档。
您似乎正在使用lxml。 这是一个建议:
from lxml import etree
XML ="""
<p1>
<p2>
<name>nikki</name>
<p3>
<c days="1">1</c>
<c days="3">5</c>
<c days="7">9</c>
</p3>
</p2>
</p1>"""
root = etree.fromstring(XML)
name = root.xpath("p2/name")[0]
p3 = root.xpath("p2/p3")[0]
day1 = p3.xpath('c[@days="1"]')[0]
day3 = p3.xpath('c[@days="3"]')[0]
day7 = p3.xpath('c[@days="7"]')[0]
print name.text, day1.text, day3.text, day7.text
输出:
nikki 1 5 9
注意谓词 (方括号中的过滤器表达式)。
问题中的'/p1/p2/p3/c@days="7"/text()'
等表达式无效。
from xml.dom.minidom import parseString
_f = open("your_file_path.xml", "r")
data = _f.read()
_f.close()
dom = parseString(data)
# name
name = dom.getElementsByTagName('name')[0].firstChild.data
# days
itemList = dom.getElementsByTagName("c")
for s in itemList:
print s.attributes['days'].value
or
day1 = dom.getElementsByTagName("c")[0].firstChild.nodeValue
or
day1 = dom.getElementsByTagName("c")[0].firstChild.data
尝试使用lxml,它有更好的xpath支持,你正在过度思考:
xml=\
"""<p1>
<p2>
<name>nikki</name>
<p3>
<c days="1">1</c>
<c days="3">5</c>
<c days="7">9</c>
</p3>
</p2>
</p1>"""
import lxml.etree as et
doc=et.fromstring(xml)
print doc.xpath('.//name/text()|.//c/text()')
出:
['nikki', '1', '5', '9']
编辑:如果你必须使用标准的lib,你可以这样做:
print root.find('.//name').text
print [e.text for e in root.findall('.//c')]
出:
nikki
['1', '5', '9']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.