2016-07-14 34 views
1

我有XML塊,我需要一些元素插入用美麗的湯來創建一個名爲「name」屬性new_tag

<importer in="!SRCFILE!" media="movie"> 
<video-out id="video_2_importer"></video-out> 
<audio-out id="audio_2_importer"></audio-out> 
</importer> 

我需要做的是插入幾個選項​​,這個塊,使我看起來就像這樣:

<importer media="movie" in="!SRCFILE!"> 
    <video-out id="video_2_importer"></video-out> 
    <audio-out id="audio_2_importer"></audio-out> 
    <option name="start-time" value="60"></option> 
    <option name="end-time" value="120"></option> 
</importer> 

我已經成功地使用BS4尋找元素,並創建新的標籤,但它出現在參數「名稱」爲BS4保留字。我已經試過如下:

in_point = soup.new_tag('option', **{'value':'60','name':'start-time'}) 

但我得到以下錯誤

TypeError: new_tag() got multiple values for keyword argument 'name' 

如果我刪除了「名」:「開始時間」從我的字典,它不正確地插入。如果我將「名稱」更改爲任何其他文本,它將起作用。所以做下面的事情會產生一個適當的標籤創建。

in_point = soup.new_tag('option', **{'value':'60','stuff':'start-time'}) 

我知道有可能是什麼我做錯了syntacticly避開讓我使用屬性「名」,我只是不知道是什麼。

回答

1

在這種情況下,您可以創建Tag的情況是這樣的:

from bs4 import BeautifulSoup, Tag 

in_point = Tag(builder=soup.builder, 
       name='option', 
       attrs={'value':'60','name':'start-time'}) 

這基本上是什麼new_tag()下引擎蓋做:

def new_tag(self, name, namespace=None, nsprefix=None, **attrs): 
    """Create a new tag associated with this soup.""" 
    return Tag(None, self.builder, name, namespace, nsprefix, attrs) 
+0

真棒,那工作。非常感激! – szumlins