我想用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,并且效果很好!