3

我想用 clojure 解析一个 .mxl 文件(MusicXML)

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

4

3 回答 3

4

从 MusicXML 的维基百科页面:

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

我猜您的 .mxl 文件是一个已压缩的 XML 文件,这就是您遇到解析错误的原因。据我所知,压缩算法是一种 zip 算法,因此您应该能够使用 java 的 zip 功能来实现它。

编辑

我刚刚在网上找到了一个示例 .mxl 文件。.mxl 文件在解压缩后包含 xml 文件。然后我可以使用以下(受此答案启发)来获取原始 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)))
于 2014-01-21T14:07:46.007 回答
1

MusicXML 的 .mxl 文件的 zip 结构类似于 EPUB 格式。请参阅MusicXML 教程中的http://www.musicxml.com/tutorial/compressed-mxl-files/zip-archive-structure/,了解有关在 MXL 存档中何处查找 XML 乐谱数据的更多信息。

于 2014-03-21T06:33:31.137 回答
0

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

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

于 2020-09-26T14:47:33.883 回答