2016-07-14 37 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