从标记python中提取值

时间:2012-10-19 07:32:59

标签: python

如何从以下提取name4的值?提供的例子是一个样本?我怎么能用xml.parsers.expat做同样的事情,我使用的是没有xml.etree的python 2.4

<test name1="" name2="" name3="0.0.0.0" name4="Linux">
</test>

5 个答案:

答案 0 :(得分:4)

使用lxml.html

import lxml.html as lh

doc=lh.fromstring('<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>')

doc.xpath('.//@name4')
Out[298]: ['Linux']

注1:正则表达式可以用于这个简单的例子,但使用正则表达式来解析xml / html是一种不好的做法,你不应该习惯这样做。

注意2:如果要安装lxmlxml.etree.ElementTree与python一样好(轻量级?)替代方案,尤其是对于更简单的任务。

答案 1 :(得分:2)

有时使用BeautifulSoup

非常简单
from BeautifulSoup import BeautifulSoup as bs

your_string = """<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>"""

soup = bs(your_string)
res = soup.findAll('test')
for i in res:
    print i.get('name4')

您还可以在文档page

上找到更多示例

更新如何更改属性名称并打印整个xml:

from BeautifulSoup import BeautifulSoup as bs

your_string = """<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>"""

soup = bs(your_string)
s = soup.test
s['name4'] = 'Ubuntu'
print soup

答案 2 :(得分:1)

from xml.dom.minidom import parseString

dom = parseString('<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>')

xmlTag = dom.getElementsByTagName('test')[0]

print xmlTag.getAttribute("name4")

答案 3 :(得分:1)

我更喜欢ElementTree,因为它默认安装在许多发行版上,包括RedHat / CentOS&gt; = 5,并且易于使用。 (lxml在功能上要优越得多)使用:

import xml.etree.ElementTree as ET

elem = ET.fromstring('<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>')
name4 = elem.get("name4")

答案 4 :(得分:1)

您还可以使用模块re:

import re
pat = re.compile('name4="(.*?)"')

text = '<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>'
pat.findall(text)