BeautifulSoup操作xml文件
BeautifulSoup操作html的介紹較為常見,可參考官方文檔,常見的對xml的操作可以使用ElementTree進行操作,這里并不是介紹BeautifulSoup操作xml,對自己在一次實踐中遇到的問題進行記錄。
問題:操作XML后,其中有多個結點,這里姑且以Id結點為例,需要替換一個其中一個Id結點,該Id結點可以通過父節點區分其他結點,因為ElementTree中可以使用iter()進行遍歷,可以很方邊的找到Id結點,但是我不知道如何找尋其父節點,最后想使用BeautifulSoup(),如果大家有什么方法,還望不吝賜教
<?xml version='1.0' encoding='UTF-8'?> <nvd xmlns="namesapce test"> <data><xtrn><Id>2019</Id></xtrn><country name="Liechtenstein"><rank>1</rank><Id>2008</Id><gdppc>141100</gdppc><tag>temp</tag><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="中國"><rank>68</rank><Id>2011</Id><gdppc>13600</gdppc><neighbor name="趙三" direction="西邊"/><neighbor name="李四" direction="東北"/><temp information="bs4">bs4study</temp></country> </data> </nvd>
BeautifulSoup文檔中介紹解析xml文件的方法如下:
BeautifulSoup(markup, "xml")Beautiful Soup將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象,所有對象可以歸納為4種:?Tag?,?NavigableString?,?BeautifulSoup?,?Comment.
1.Tag結點
Tag?對象與XML或HTML原生文檔中的tag相同:
#-*-encoding:utf-8-*- from bs4 import BeautifulSoup soup = BeautifulSoup(open("websit.xml"),'xml') #打印文件對象信息 # print(soup) #打印tag結點 print(soup.tag) print(type(soup.tag))在原文件中查找確實有“tag”結點,因此這里使用結點的時候可以直接使用文件對象.標簽的形式進行索引。
那文件對象兩個最重要的屬性就是name和attributes,對于大多數對于xml實際操作中,均是對標簽的屬性和name進行操作。
#-*-encoding:utf-8-*- from bs4 import BeautifulSoup soup = BeautifulSoup(open("websit.xml"),'xml')print("temp(tag):",soup.temp) print("temp(tag)name:",soup.temp.name) print("temp(tag)attribute:",soup.temp.attrs) #可以通過鍵值的形式查找 print("temp(tag)attribute:",soup.temp['information'])注意tag標簽的屬性可以被添加,刪除或修改. 再說一次, tag的屬性操作方法與字典一樣
1.1 attibute
#替換屬性值 for index in soup.find_all("temp"):print type(index.attrs)if index.attrs.has_key("information"):index.attrs.update({"information":"8520"})如果查找temp標簽,想要替換其attribute屬性,由于index.attrs為字典,可以通過鍵值的形式進行操作
1.2 name
字符串常被包含在tag內.Beautiful Soup用?NavigableString?類來包裝tag中的字符串,tag中包含的字符串不能編輯,但是可以被替換成其它的字符串,用?replace_with()?方法:
xml中有三個Id標簽,但是只想替換其父節點為xtrn的結點的name值,使用replace_with
for index in soup.find_all('Id'):#替換name值,只能使用replace_withif index.parent.name == "xtrn":print(index.text)index.string.replace_with("2020")?
總結
以上是生活随笔為你收集整理的BeautifulSoup操作xml文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python os模块常用介绍
- 下一篇: Java之接口