如何从Python提取XML值@属性=某物?

2024-09-22 16:43:36 发布

您现在位置: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的代码

^{pr2}$

Tags: textname名称rootxmldaysxpathetree
3条回答
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

ElementTree元素的text属性将为您提供元素标记之间的值。所以:

print name, day1.text, day2.text, day7.text

应该能给你预期的产量。在

Here是ElementTree元素的文档。在

您似乎在使用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 

输出:

^{pr2}$

注意predicates(方括号中的过滤器表达式)。在

问题中的表达式'/p1/p2/p3/c@days="7"/text()'无效。在

相关问题 更多 >