用clojure解析.mxl文件



我想用clojure

解析.mxl文件(musicxml)到目前为止都不是。

从MusicXMl上的Wikipedia页面上:

上面列出的文本表示为冗长;MusicXML v2.0通过添加一个.mxl后缀的压缩ZIP格式来解决此问题,该格式可以使文件大约使未压缩版本的大小为一个二十分。[16]

我猜想您的.mxl文件是已被压缩的XML文件,这就是为什么您会遇到解析错误的原因。我可以收集到的,压缩算法是一种ZIP算法,因此您应该能够使用Java的Zip功能来获取它。

编辑

我刚刚使用了我在线找到的示例.mxl文件。.mxl文件一旦解压缩,就包含XML文件。然后,我能够使用以下(受此答案的启发)来获取RAW 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)))

musicxml的.mxl文件的zip结构类似于epub格式。请参阅http://www.musicxml.com/tutorial/compressed-mxl-files/zip-Archive-Scrupture/in Musicxml Tutorial中有关在MXL档案中找到XML得分数据的更多信息。

<</p> <</p> <</p> <</p> <</p> <</p> <</p> <</p> <</p>

如果有人偶然发现了这一点,并且无法弄清楚如何解压缩压缩MXL文件:

在Mac上,我只是将其重命名为.zip,并且效果很好!

最新更新