为了账号安全,请及时绑定邮箱和手机立即绑定

如何在树中插入新块?

如何在树中插入新块?

www说 2023-06-27 18:20:54
使用 Beautifulsoup,我需要读取 KML 文件,并在包含 LineString 部分的所有地标中插入一个新块。这是 KML 文件:<?xml version="1.0" encoding="utf-8"?><kml xmlns="http://www.opengis.net/kml/2.2">  <Document>    <name>Document.kml</name>    <Placemark>      <name>My track</name>      <LineString>        <coordinates>-0.376291,43.296237,199.75        -0.377381,43.29405</coordinates>      </LineString>    </Placemark>  </Document></kml>以下不起作用:from bs4 import BeautifulSoup as Soupwith open('input.kml') as data:    kml_soup = Soup(data, 'lxml-xml') # Parse as XMLplacemarks = kml_soup.find_all('Placemark')for pm in placemarks:    if pm.find('LineString'):        print("LS found")                #How to insert new elements before LineString?        #<Style><LineStyle><width>3</width></LineStyle></Style>        style = kml_soup.new_tag("Style")        style.string = "<LineStyle><width>3</width></LineStyle>"                #AttributeError: 'NoneType' object has no attribute 'insert_before'        pm.string.insert_before(style)
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您可能使用了错误的对象。尝试以下操作。


placemarks = kml_soup.find_all('Placemark')

for pm in placemarks:

    LineString = pm.find('LineString')

    if LineString:

        print("LS found")

        style = kml_soup.new_tag("Style")

        style.string = "<LineStyle><width>3</width></LineStyle>"

        LineString.insert_before(style) # Use LineString

这是另一个解决方案。


from simplified_scrapy import SimplifiedDoc,utils

html = utils.getFileContent('input.kml')

doc = SimplifiedDoc(html)

placemarks = doc.selects('Placemark')

for pm in placemarks:

    LineString = pm.select('LineString')

    if LineString:

        print("LS found")

        style = "<Style><LineStyle><width>3</width></LineStyle></Style>\n"+" "*6

        LineString.insertBefore(style)

# print (doc.html)


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信