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

また、モジュール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 に答える
1

ElementTreeは、RedHat / CentOS> = 5を含む多くのディストリビューションにデフォルトでインストールされており、使いやすいので、私はElementTreeを好みます。(ただし、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
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 に答える