base64 でエンコードされた画像が埋め込まれた xml ファイルを受け取りました。これをデコードしてファイルとして保存する必要があります。
このようなファイルの変更されていない (圧縮されていない) 例は、以下からダウンロードできます。
20091123-125320.zip (60KB)
ただし、「Base-64 char 配列の長さが無効です」や「Base-64 文字列の文字が無効です」などのエラーが発生します。コードでエラーが発生したコードの行をマークしました。
ファイルは次のようになります。
<?xml version="1.0" encoding="windows-1252"?>
<mediafiles>
<media media-type="image">
<media-reference mime-type="image/jpeg"/>
<media-object encoding="base64"><![CDATA[/9j/4AAQ[...snip...]P4Vm9zOR//Z=]]></media-object>
<media.caption>What up</media.caption>
</media>
</mediafiles>
そして、このように処理するコード:
var xd = new XmlDocument();
xd.Load(filename);
var nodes = xd.GetElementsByTagName("media");
foreach (XmlNode node in nodes)
{
var mediaObjectNode = node.SelectSingleNode("media-object");
//The line below is where the errors occur
byte[] imageBytes = Convert.FromBase64String(mediaObjectNode.InnerText);
//Do stuff with the bytearray to save the image
}
xml-data は企業の新聞システムからのものなので、ファイルに問題はないと確信しています。ファイルを処理する方法に何か問題があるに違いありません。それは単に間違っています。エンコーディングの問題かも?
mediaObjectNode.InnerText の内容を書き出そうとしましたが、これは base64 でエンコードされたデータであるため、xml-doc のナビゲートは問題ではありません。
私はグーグル、ビンジング、スタックオーバーフロー、泣き叫びを繰り返してきましたが、解決策が見つかりませんでした...助けてください!
編集:
実際のサンプル ファイル (および報奨金) を追加しました。上記の例では単純化して無関係なものを削除しているため、ダウンロード可能なファイルのスキーマは少し異なることに注意してください...