我想用clojure
解析.mxl文件(MusicXML)到目前为止,我已经看到很多工具可以使用.xml文件,但我找不到使用.mxl的方法,也许我应该首先将mxl转换为xml,但我不知道该怎么做那两个都没有。
答案 0 :(得分:3)
来自MusicXML上的维基百科页面:
上面列出的文字表示是详细的; MusicXML v2.0通过添加带有.mxl后缀的压缩zip格式来解决这个问题,该格式可以使文件大约是未压缩版本的二十分之一。[16]
我猜你的.mxl文件是一个已被压缩的XML文件,这就是你得到解析错误的原因。到目前为止我可以收集,压缩算法是一个zip算法,所以你应该能够使用java的zip功能来实现它。
编辑
我刚刚在网上找到了一个示例.mxl文件。 .xxl文件一旦解压缩,其中包含xml文件。然后,我可以使用以下(受this answer启发)来获取原始XML ...
(defn extract-mxl [path]
(let [[_ filename] (re-matches #"(.*)\.mxl$" (.getName (java.io.File. path)))
zipfile (java.util.zip.ZipFile. path)
zipentry (.getEntry zipfile (str filename ".xml"))
in (.getInputStream zipfile zipentry)]
(slurp in)))
答案 1 :(得分:1)
MusicXML的.mxl文件的zip结构类似于EPUB格式的zip结构。有关在MXL存档中查找XML分数数据的位置的详细信息,请参阅MusicXML教程中的http://www.musicxml.com/tutorial/compressed-mxl-files/zip-archive-structure/。
答案 2 :(得分:0)
如果有人偶然发现了这个信息,却不知道如何解压缩压缩的mxl文件:
在Mac上,我刚刚将其重命名为.zip,效果很好!