次からname4の値を抽出するにはどうすればよいですか? 提供されている例はサンプルですか? xml.parsers.expat で同じことを行うにはどうすればよいですか。xml.etree を持たない python 2.4 を使用しています。
<test name1="" name2="" name3="0.0.0.0" name4="Linux">
</test>
次からname4の値を抽出するにはどうすればよいですか? 提供されている例はサンプルですか? xml.parsers.expat で同じことを行うにはどうすればよいですか。xml.etree を持たない python 2.4 を使用しています。
<test name1="" name2="" name3="0.0.0.0" name4="Linux">
</test>
を使用して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:インストールする場合lxml
はxml.etree.ElementTree
、Pythonに付属している(軽量?)代替手段として、特に単純なタスクに適しています。
時々それは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
また、モジュールreを使用します。
import re
pat = re.compile('name4="(.*?)"')
text = '<test name1="" name2="" name3="0.0.0.0" name4="Linux"></test>'
pat.findall(text)
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")
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")