The Tag
class and the parser classes support a method called insert
. It works just like a Python list's insert
method: it takes
an index to the tag's contents
member, and sticks a new element in
that slot.
标签类和剖析类有一个insert方法,它就像Python列表的insert
方法:
它使用索引来定位标签的contents
成员,然后在那个位置插入一个新的元素。
This was demonstrated in the previous section, when we replaced a
tag in the document with a brand new tag. You can use insert
to
build up an entire parse tree from scratch:
在前面那个小结中,我们在文档替换一个新的标签时有用到这个方法。你可以使用insert
来重新构建整个剖析树:
from BeautifulSoup import BeautifulSoup, Tag, NavigableString soup = BeautifulSoup() tag1 = Tag(soup, "mytag") tag2 = Tag(soup, "myOtherTag") tag3 = Tag(soup, "myThirdTag") soup.insert(0, tag1) tag1.insert(0, tag2) tag1.insert(1, tag3) print soup # <mytag><myOtherTag></myOtherTag><myThirdTag></myThirdTag></mytag> text = NavigableString("Hello!") tag3.insert(0, text) print soup # <mytag><myOtherTag></myOtherTag><myThirdTag>Hello!</myThirdTag></mytag>
An element can occur in only one place in one parse tree. If you
give insert
an element that's already connected to a soup object, it
gets disconnected (with extract
) before it gets connected
elsewhere. In this example, I try to insert my NavigableString
into
a second part of the soup, but it doesn't get inserted again. It gets
moved:
一个元素可能只在剖析树中出现一次。如果你给insert
的元素已经和soup对象所关联,
它会被取消关联(使用extract
)在它在被连接别的地方之前。在这个例子中,我试着插入我的NavigableString
到
soup对象的第二部分,但是它并没有被再次插入而是被移动了:
tag2.insert(0, text) print soup # <mytag><myOtherTag>Hello!</myOtherTag><myThirdTag></myThirdTag></mytag>
This happens even if the element previously belonged to a
completely different soup object. An element can only have one parent
, one nextSibling
, et cetera, so it can only be in one place
at a time.
即使这个元素属于一个完全不同的soup对象,还是会这样。
一个元素只可以有一个parent
,一个nextSibling
等等,也就是说一个地方只能出现一次。