2025-05-10 23:10:52 +08:00

68 lines
2.5 KiB
Python

import xml.etree.ElementTree as ET
PLUS = "+"
EMPTY = ""
level_name = ["Basic","Advanced","Expert","Master","Re:Master"]
def parse_music_xml(file_path):
# 解析 XML 文件
tree = ET.parse(file_path)
root = tree.getroot()
# 获取音乐ID
name_elem = root.find("name/id")
id = name_elem.text if name_elem is not None else "?"
# 获取音乐名称
name_elem = root.find("name/str")
music_name = name_elem.text if name_elem is not None else "?"
# 获取艺术家名称
artist_elem = root.find("artistName/str")
artist_name = artist_elem.text if artist_elem is not None else "?"
version_elem = root.find("AddVersion/str")
version_name = version_elem.text if version_elem is not None else "?"
# 提取启用谱面信息(设计者 + 等级)
note_infos = []
notes_data = root.find("notesData")
if notes_data is not None:
for note in notes_data.findall("Notes"):
# 判断是否启用
is_enable_elem = note.find("isEnable")
if is_enable_elem is not None and is_enable_elem.text.lower() == "true":
# 提取设计者
designer_elem = note.find("notesDesigner/str")
designer = designer_elem.text if (designer_elem is not None and designer_elem.text) else "-"
# 提取等级
level_elem = note.find("level")
level_decimal_elem = note.find("levelDecimal")
level = level_elem.text if level_elem is not None else "0"
level_decimal = level_decimal_elem.text if level_decimal_elem is not None else "0"
# 组合信息
note_infos.append({
"designer": designer,
"level": f"{level}.{level_decimal}",
"levelshow": f"{level}{PLUS if int(level_decimal) > 6 else EMPTY}",
})
return id,music_name, artist_name, note_infos , version_name
if __name__ == "__main__":
file_path = "/Users/bennett/Downloads/SDEZ/Package/Sinmai_Data/StreamingAssets/A000/music/music011663/Music.xml"
id,music_name, artist_name, note_infos,version_name = parse_music_xml(file_path)
print("ID:",id)
print("音乐名称:", music_name)
print("艺术家名称:", artist_name)
print("启用谱面列表:")
for i in range(len(note_infos)):
print(level_name[i])
print(f"等级:{note_infos[i]['levelshow']}")
print(f"定数:{note_infos[i]['level']}")
print(f"铺师:{note_infos[i]['designer']}")
print()