0

私が知る限り、この質問は繰り返しではありません。私は何日も解決策を探していて、単に問題を突き止めることができないからです. Python を使用して、XML ドキュメント タグからネストされた属性を出力しようとしています。私が実行しているエラーは、情報を取得しようとしているタグ I に複数の属性があるという事実に関係していると思います。「second-tag」タグから「status」値が必要であることを指定できる方法はありますか?? 助けてくれてありがとう。

私の XML ドキュメント 'test.xml':

<?xml version="1.0" encoding="UTF-8"?>
<first-tag xmlns="http://somewebsite.com/" date-produced="20130703" lang="en" produced-   by="steve" status="OFFLINE">
    <second-tag country="US" id="3651653" lang="en" status="ONLINE">
    </second-tag>
</first-tag>

私のPythonファイル:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
whatiwant = root.find('second-tag').get('status')
print whatiwant

エラー:

AttributeError: 'NoneType' object has no attribute 'get'
4

3 に答える 3

2

.get ではなく、.find('second-tag') で失敗します。

あなたが望むもの、そしてあなたのイディオムのために、BeautifulSoup は輝きます。

from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(xml_string)
whatyouwant = soup.find('second-tag')['status']
于 2013-07-03T19:41:54.870 に答える
0

ここでの問題は、ここで名前が付けられたタグがないことsecond-tagです。というタグがあり{http://somewebsite.com/}second-tagます。

これは非常に簡単に確認できます。

>>> print(root.getchildren())
[<Element '{http://somewebsite.com/}second-tag' at 0x105b24190>]

名前空間に準拠していない XML パーサーは、間違ったことを行ってそれを無視し、コードを機能させる可能性があります。友好的になるために後方に曲がる ( のようなBeautifulSoup) パーサーは、事実上、ユーザーが を要求すると自動的に試行{http://somewebsite.com/}second-tagしますsecond-tag。しかしElementTree、どちらでもありません。

知っておく必要があるのはそれだけではない場合は、まず名前空間に関するチュートリアルを読む必要があります (おそらくこれ)。

于 2013-07-03T19:57:24.943 に答える
0

私はelementtreeでは知りませんが、ehpまたはeasyhtmlparserでそうします。ここにリンクがあります。 http://easyhtmlparser.sourceforge.net/ 友人がこのツールについて教えてくれました。私はまだそれが非常に優れていてシンプルであることを学んでいます。

from ehp import *

data = '''<?xml version="1.0" encoding="UTF-8"?>
<first-tag xmlns="http://somewebsite.com/" date-produced="20130703" lang="en" produced-   by="steve" status="OFFLINE">
    <second-tag country="US" id="3651653" lang="en" status="ONLINE">
    </second-tag>
</first-tag>'''

html  = Html()
dom   = html.feed(data)
item = dom.fst('second-tag')
value = item.attr['status']
print value
于 2013-07-03T19:43:32.350 に答える