Python-读取Xml文件

问题描述 投票:0回答:1

链接:http://xspf.org/ns/0/XSPF.rdf

def read_xspf_file(self,start,filename):
    self.tree = ET.parse(filename)
    self.playlist = self.tree.getroot()
    self.trackList = self.playlist.find("trackList")
    self.tracks = self.trackList.findall("track")
    self.songs = []
    for song_in_playlist in self.tracks:
        self.song = {}
        if song_in_playlist.find("location") is not None:
            self.song.update({"path": song_in_playlist.find("location").text})
        else:
            self.song.update({"path": ""})

        if song_in_playlist.find("creator") is not None:
            self.song.update({"artist": song_in_playlist.find("creator").text})
        else:
            self.song.update({"artist": "Άγνωστος καλλιτέχνης"})

        if song_in_playlist.find("album") is not None:
            self.song.update({"album_title": song_in_playlist.find("album").text})
        else:
            self.song.update({"album_title": "Άγνωστο τίτλος άλμπουμ"})

        if song_in_playlist.find("title") is not None:
            self.song.update({"title": song_in_playlist.find("title").text})
        else:
            self.song.update({"title": "Άγνωστος τίτλος"})

        if song_in_playlist.find("annotation") is not None:
            self.song.update({"annotation": song_in_playlist.find("annotation").text})
        else:
            self.song.update({"annotation": ""})

        if song_in_playlist.find("image") is not None:
            self.song.update({"image": song_in_playlist.find("image").text})
        else:
            self.song.update({"image": ""})

        if song_in_playlist.find("info") is not None:
            self.song.update({"info": song_in_playlist.find("info").text})
        else:
            self.song.update({"info": ""})



        self.songs.append(self.song)
    print(self.songs)
    return self.songs

仅当我删除xspf文件第二行中的xmlns="http://xspf.org/ns/0/"时,我才能解析链接中的文件

使用默认声明,我得到那个错误:

Traceback (most recent call last):
  File "main.py", line 192, in <module>
    playlist_parser.parse_playlist(start,"playlist_files/playlist.xspf")
  File "/home/chris/Έγγραφα/Python/Papinhio player/scripts/read_playlist.py", line 40, in parse_playlist
    self.songs_data = self.read_xspf_file(start,filename)
  File "/home/chris/Έγγραφα/Python/Papinhio player/scripts/read_playlist.py", line 132, in read_xspf_file
    self.tracks = self.trackList.findall("track")
AttributeError: 'NoneType' object has no attribute 'findall'

我认为很奇怪...为什么?我该如何解决?

编辑:我尝试过

self.playlist = self.tree.getroot() self.playlist.set("xmlns","")

没有帮助。

python xml playlist xspf
1个回答
0
投票
def read_xspf_file(self,start,filename):
        self.tree = ET.parse(filename)
        self.playlist = self.tree.getroot()
        self.trackList = self.playlist.find("{http://xspf.org/ns/0/}trackList")
        self.tracks = self.trackList.findall("{http://xspf.org/ns/0/}track")
        self.songs = []
        for song_in_playlist in self.tracks:
            self.song = {}
            if song_in_playlist.find("{http://xspf.org/ns/0/}location") is not None:
                self.song.update({"path": song_in_playlist.find("{http://xspf.org/ns/0/}location").text})
            else:
                self.song.update({"path": ""})

            if song_in_playlist.find("{http://xspf.org/ns/0/}creator") is not None:
                self.song.update({"artist": song_in_playlist.find("{http://xspf.org/ns/0/}creator").text})
            else:
                self.song.update({"artist": "Άγνωστος καλλιτέχνης"})

            if song_in_playlist.find("{http://xspf.org/ns/0/}album") is not None:
                self.song.update({"album_title": song_in_playlist.find("{http://xspf.org/ns/0/}album").text})
            else:
                self.song.update({"album_title": "Άγνωστο τίτλος άλμπουμ"})

            if song_in_playlist.find("{http://xspf.org/ns/0/}title") is not None:
                self.song.update({"title": song_in_playlist.find("{http://xspf.org/ns/0/}title").text})
            else:
                self.song.update({"title": "Άγνωστος τίτλος"})

            if song_in_playlist.find("{http://xspf.org/ns/0/}annotation") is not None:
                self.song.update({"annotation": song_in_playlist.find("{http://xspf.org/ns/0/}annotation").text})
            else:
                self.song.update({"annotation": ""})

            if song_in_playlist.find("{http://xspf.org/ns/0/}image") is not None:
                self.song.update({"image": song_in_playlist.find("{http://xspf.org/ns/0/}image").text})
            else:
                self.song.update({"image": ""})

            if song_in_playlist.find("{http://xspf.org/ns/0/}info") is not None:
                self.song.update({"info": song_in_playlist.find("{http://xspf.org/ns/0/}info").text})
            else:
                self.song.update({"info": ""})

如果我不知道xmlns,该怎么办。.xspf播放列表文件是否是该标准?

我尝试过:

print(self.playlist.keys())。输出[版本]

如果仅此而已,除非您知道xmlns,否则我将无法继续使用该库解析xml文件。

是真的吗?

© www.soinside.com 2019 - 2024. All rights reserved.