使用Clojure解析.mxl文件

时间:2014-01-21 11:21:00

标签: xml clojure musicxml

我想用clojure

解析.mxl文件(MusicXML)

到目前为止,我已经看到很多工具可以使用.xml文件,但我找不到使用.mxl的方法,也许我应该首先将mxl转换为xml,但我不知道该怎么做那两个都没有。

3 个答案:

答案 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,效果很好!