2

如何从以下内容中提取 name4 的值?提供的示例是示例?我怎么能对 xml.parsers.expat 做同样的事情,我正在使用没有 xml.etree 的 python 2.4

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

5 回答 5

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 附带的一样好(轻量级?)替代品,尤其是对于更简单的任务。

于 2012-10-19T07:37:40.447 回答
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')

您还可以在文档页面上找到更多示例

更新如何更改属性名称并打印整个 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
于 2012-10-19T07:49:59.110 回答
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")
于 2012-10-19T07:44:41.320 回答
1

我更喜欢 ElementTree,因为它默认安装在许多发行版上,包括 RedHat/CentOS >= 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")
于 2012-10-19T07:49:56.693 回答
1

您还使用模块 re:

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

text = '<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>'
pat.findall(text)
于 2012-10-19T08:19:38.103 回答