2015-10-21 72 views
1

我試圖使用BeautifulSoup來解析XML文件。其中一個元素有一個連字符:分配代碼在Python中,如何引用包含連字符的XML標記

如何訪問它?我試過了:

soup.distribution-code 
soup."distribution-code" (tried single quotes too) 
soup.[distribution-code] 

但這些都沒有工作。

+1

您是否嘗試過'湯['distribution-code']'? –

+0

我想你真的需要[this](http://www.crummy.com/software/BeautifulSoup/bs4/doc/)。 –

+0

這給了我這個錯誤:「回溯(最近通話最後一個): 文件‘’,1號線,在 湯[」分配碼'] 文件「/usr/lib/python2.7/dist- packages/bs4/element.py「,第834行,在__getitem' – WebUserLearner

回答

2

可以使用常規的Python語法訪問由屬性引用非連元素,即obj.name,然而,-是沒有使用的語法(Python的把它當作「減」運算符)時一個有效的字符,因此你不能通過該方法訪問這些元素。

相反,使用soup.find()soup.find_all()

>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup('<thing><id>1234</id><distribution-code>555444333</distribution-code></thing>') 
>>> soup.thing 
<thing><id>1234</id><distribution-code>555444333</distribution-code></thing> 
>>> soup.id 
<id>1234</id> 
>>> soup.distribution-code 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'code' is not defined 
>>> soup.find('distribution-code') 
<distribution-code>555444333</distribution-code> 

或者,如chepner's comment指出的那樣,你可以使用getattr()setattr()獲取和設置包含連字符的屬性。我認爲soup.find()是訪問這些元素的更常用的方法。

+0

你可以使用'getattr(湯,'分配代碼')'。 – chepner

+0

@chepner:是的,非常好的一點。通過「屬性引用」,我的意思是正常的Python語法(_'obj.name'_),而不是通過'getattr()'。我已經更新了我的回答以澄清幷包含您的建議。 – mhawke

相關問題