如何从以下提取name4的值?提供的例子是一个样本?我怎么能用xml.parsers.expat做同样的事情,我使用的是没有xml.etree的python 2.4
<test name1="" name2="" name3="0.0.0.0" name4="Linux">
</test>
答案 0 :(得分:4)
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:如果要安装lxml
,xml.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)