如何以二进制形式获取节点的值?

时间:2012-11-26 12:32:54

标签: .net xml binary

我尝试使用此代码执行此操作,但我在ArgumentException函数中获得了带有“ms”的byteArrayToImage

byteArrayToImage正常使用byte[],但是当我获得节点值时遇到了麻烦。

XML节点包含二进制代码。

public Image byteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);

    return bytes;
}

foreach (var binary in xdoc.Root.Elements(ns + "binary"))
{

    if (item.Value == "cover.jpg") MessageBox.Show(item.Value.ToString());
    foreach (var binaryAttr in binary.Attributes())
    {
        if (binaryAttr.Value == "cover.jpg")
        {
            var s = GetBytes(binary.Value);

            byteArrayToImage(s);


        }
    }
}

1 个答案:

答案 0 :(得分:1)

“包含二进制代码”并不清楚你的意思。通常,XML中的二进制数据存储在Base64中......而您正在以一种几乎肯定不能在XML中工作的方式转换普通字符数据。

我怀疑您可以删除GetBytes方法并使用

var bytes = Convert.FromBase64String(binary.Value);