我一直在研究分析樂譜並從中刪除特定註釋的項目。所以,現在我有了我的代碼所需的信息,現在我需要用我的新信息編輯原始XML分數。我在Python中這樣做,並已使用Minidom,所以我顯然想堅持(我知道這可能是一個愚蠢的選擇,因爲這裏的很多帖子建議不同的XML解析方法,由於不太友好的界面目前在Minidom)。刪除和替換XML文件中的特定節點
所以,在我原來的XML文件中說,我有一個只有10個音符組成的音樂作品。註釋的XML格式如下所示:
<note>
<pitch>
<step>E</step>
<alter>-1</alter>
<octave>5</octave>
</pitch>
<duration>72</duration>
</note>
因此,對於每個音符值,這將重複10次。現在我已經完成了我的分析,我想刪除這些註釋中的5個。通過刪除我的意思是取代休息(因爲它畢竟是一個樂譜,它有一個符合的形狀)。所以對於一個XML文件中的其餘部分的格式如下:
<note>
<rest/>
<duration>72</duration>
</note>
因此,所有我需要做的就是去掉間距標籤,並用其他標籤取代。然而,我不確定如何去做這件事,還沒有真正從我的搜索中發現任何似乎相似的東西。
我不是很費心尋找要刪除的筆記的位置,因爲我已經寫了一個快速測試工具來展示我將如何在Python中進行如下操作(xml_format基本上只是包含我的新詞典的一個詞典列表信息)。它包含與原始XML文件相同數量的註釋,唯一的區別是它們中的一些現在標記爲被刪除。因此,原始文件可能具有如下注釋:G,Bb,D,C,G,F,G,D,Bb和xml_format將具有G,Bb,D,REMOVE,G,REMOVE,G,D,Bb等。
我剛剛返回了一個以確保正確數量的筆記被刪除。
def remove_notes(xml_format, filename):
doc = minidom.parse(filename)
count = 0
a = 0
note = doc.getElementsByTagName("note")
for item in note:
if xml_format[count]['step'] == 'Remove':
a = a + 1
# THEN REMOVE THE ENTIRE PITCH TAG, REPLACE WITH REST
count = count + 1
# ELSE DON'T DO ANYTHING
return a
所以基本上我只是在尋找可用於在特定點刪除特定的節點,然後用一個新的節點所替代,被寫入到之前的那種語法或代碼的一些援助新文件。非常感謝你的幫助,我希望這是可能的(邏輯看起來不復雜,但誰知道什麼是可能的)!