Denemoというソフトが出力した .denemo ファイルを読み書きしたいのです。
.denemo ファイルは MusicXML という形式のようなのですが、バイナリファイルなのでどのように扱えば良いのかわからず質問しました。
XML parser というものが関係あるようなのですが、よくわかりません。
まずは、バイナリ形式のXMLをテキスト形式で読みたい。
次に、バイナリ形式のXMLをプログラム(C++)で操作して読み書きしたい。
と、思っています。
OS は Windows XP で、コンパイラは g++ を使用しています。
よろしくお願いいたします_(_ _)_
No.1ベストアンサー
- 回答日時:
>MusicXML という形式のようなのですが、バイナリファイルなので
譜面をXMLで記述しているだけで、ただのXMLファイルだと思います。
>まずは、バイナリ形式のXMLをテキスト形式で読みたい。
そもそも、XMLは文字コードを意識しているのですべてテキストで記述されます。つまり、XMLという時点でテキストファイルです。
ということで。
>バイナリ形式のXMLをプログラム(C++)で操作して読み書きしたい。
WindowsにはMSXMLと呼ばれるXMLパーサがIEやOfiiceなどに入っています。IEがほぼ標準で入っているので、最近のWindowsマシンにはほぼ入っているでしょう。COMを使用しているので、少し面倒。
MS.NetにはSystemXMLというXMLパーサがあります。
C++なら後者のほうがいいかもしれません。
No.6
- 回答日時:
実証する環境がないので心苦しいのですが、
ググッてみたところ、
「(たぶんwin環境において)xmlSaveFormatFile()関数使うと
出力xmlファイルがバイナリになる」
という投稿
http://www.mail-archive.com/xml@gnome.org/msg044 …
を見つけました。
英語力がイマイチ足りないので、この投稿の、この後の
質問者と回答者のたどった経緯がはっきりつかめないのですが。
最終的に解決したっぽい?
---
ここで取り上げられているxmlSaveFormatFile()関数というのは、
libxml(というライブラリ)のAPIみたいです。
http://xmlsoft.planetmirror.com/html/libxml-tree …
---
Denemoのソースコードを(ググッて)見てみたのですが、
Denemoで「Denemo XML Format」を選択して
XMLファイル出力しようとすると、
最終的に(libxmlの)xmlSaveFile()関数が呼ばれる・・・
・・・ような気がするのですが。
---
Denemoの「ファイル出力GUI」部分と思われるソースコード。
gtkフレームワークを知らないので、
これまた全くのカンなのですが。
http://www.koders.com/cpp/fid2948DB0B5120E3FD609 …
(filesel_save()周辺)
かなり突っ込んで調べていただきありがとうございます。
Denemoのメーリングリストにメールを出したのですが、ちょうど今返事を
もらえました。
結局、DenemoはXMLをgzipしてから出力しているということがわかりました。
Denemo XML Formatファイルをgunzipするとテキスト形式のXML
(らしきもの。まだ中身をちゃんと見ていません。)になりました。
さらに、gunzipしたものを再びgzipするとDenemoで読み込むことができました。
しかし、ソースコードの中まで読むなんてすごいですね。
私はちょっとそこまではできないです(^^;
これで表題の「バイナリ形式のXMLファイルを読み書きしたい」は
解決しましたので締めたいと思います。
皆さんのご援助に感謝します!!ありがとうございました!
No.5
- 回答日時:
>Denemo が出力した .denemo ファイル
MusicXMLを独自にバイナリ化したんだとしたら困難ですね。
普通ツールは互換性のために他のソフトとやり取りするファイルを出力できたりしますが、MusicXML形式では書き出せないんでしょうか?
>XML parser というのはテキスト形式で書かれた XML ファイルを読み込んで、プログラムが扱いやすい形に変換
ほぼ、その認識であってます。
パーサーは構文解析という意味で、よく使われるのは言語のインタプリタやコンパイルの構文解析ですね。
エレメント(タグ)の意味解析などは結局自分でやるしかないので、けっこう面倒だったりします。
この回答への補足
Denemo の保存ダイアログでは Denemo XML Format を選択して保存しています。
Denemo のホームページには「他のソフトと互換性を保つために MusicXML を
サポートしている」と書いてあるので、Denemo XML Format が MusicXML では
ないかと考えているのですが。。。
しかし、.denemo ファイルがバイナリ形式だということは違うのかもしれません。
このへんのことをフォーラムで質問してみようかと思います。
(初めて「教えて!goo」を利用していますが、予想外に回答が来るので
うれしい驚きです。回答してくださる皆さんに感謝!!)
No.4
- 回答日時:
.denemoファイルがバイナリファイルであればそれはMusicXMLではないということになります。
バイナリの解析はファイルフォーマット等の情報がないと無理でしょう。
この回答への補足
php504さんありがとうございます!
やはりバイナリファイルであれば、XML ではないのですね。。。
Denemo はもともと UNIX/Linux 用ソフトのようなので、Windowsで実行して
いるために出力ファイルが文字化けすることがあるのかな、とも思ったのですが。
バイナリファイルであるということは、php504さんが言われたように開発元の
ファイルフォーマット情報がないとダメですよね。
Denemo のフォーラムに投稿してみます。(英語かぁ。。。頑張るしかない!!)
No.3
- 回答日時:
ただのテキストじゃないでしょうか?
http://ja.wikipedia.org/wiki/MusicXML
開発環境がcygwinのようなので、GPLライセンスでかまわなければかなりありますよ。
http://www.nbrains.net/php/pukiwiki/index.php?li …
都合よく日本語なのは数少ないと思いますが、MiXとか少しはあります。
この回答への補足
aris_wizさん、zwiさん、早速の回答ありがとうございます!!
ただ説明がまずかったようで、Denemo が出力した .denemo ファイルは
テキストエディタで開こうとしても文字化けし、バイナリエディタで
開いても中身の意味がわかりません。
Denemo のホームページを見ると MusicXML で出力していると書かれて
いたのですが(英語なので確かではありませんが。。。)、
お二人の言われたように XML は本来テキストで書かれるべきものですよね。
それで、XML をバイナリで記述することもあるのかな、と思った次第です。
基本的な質問に戻りますが、XML parser というのはテキスト形式で
書かれた XML ファイルを読み込んで、プログラムが扱いやすい形に変換
(というか解釈)するもの、ということであっているでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
EOF
-
エディットボックスの改行について
-
ページ読み込み時に自動的にsub...
-
可逆圧縮のファイル形式のファ...
-
【MFC】CFileでSeekした位置か...
-
RS-232Cで接続したPC間のファイ...
-
FMFファイルの構造を知りたいの...
-
エラー:ストリームの終わりを...
-
C言語初心者の質問失礼します。
-
マイクラでPythonのプログラミ...
-
どんなプログラムを書いても指...
-
バッチで118項目のCSVを処理し...
-
絶対パスの絶対て英語で何でし...
-
ビットマップ画像をRGB値でエク...
-
VBAでMP3を鳴らしたい
-
エクセルVBAにてテキスト出力が...
-
コンパイルエラー「include フ...
-
以下のように複数のファイルを...
-
ファイル名の先頭にアンダース...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
Microsoft VBAで2GBを超えるフ...
-
EOF
-
入力ファイルをバイナリにする利点
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
【MFC】CFileでSeekした位置か...
-
ページ読み込み時に自動的にsub...
-
MacからWinにファイルを添付す...
-
24ビットのWaveデータの中身に...
-
FTPでエクセルをPUTするとファ...
-
【python】Excelファイルを読み...
-
EXCEL VBAで、バイナリデータの...
-
バイナリファイルの比較につい...
-
PHPのfgetcsvの処理容量について
-
ビットマップファイル生成(C言...
-
バイナリーデータの一部データ...
-
デバイスファイルに書き込むこと
おすすめ情報