在.NET中将二进制XML读作文本

时间:2010-12-17 15:17:39

标签: .net android xml parsing binary

AndroidManifest.xml文件在apk中编译和打包后变成二进制xml文件。我提供此信息,以防这个和常规二进制xml文件之间存在差异,但我不确定是否存在。

我需要获取此xml文件中包含的信息。有javapython的工具,但我找不到.Net的任何内容。如何在.NET中阅读此文件?

这是我发现的最有前途的解决方案,但它仍然不会以人类可读的格式显示文本。

using (BinaryReader b = new BinaryReader(File.Open(filePath, FileMode.Open), Encoding.ASCII)) {
     int pos = 0;
     int length = (int)b.BaseStream.Length;
     while (pos < length) {
          char v = b.ReadChar();
          Console.Write(v);
          pos += sizeof(char);
     }
}

任何想法我做错了什么?

我在创建encoding时尝试使用不同的BinaryReader,但它们没有用。

感谢。

3 个答案:

答案 0 :(得分:1)

该文件不仅仅是xml的“二进制数据”。 android xml有一个“格式”。

你可以查看AXMLPrinter2 - 它需要二进制xml并将其转换为人类可读的。我直接链接到一个类似于完成大部分工作的类。

您需要从清单文件中获得哪些信息? android SDK中的aapt.exe也可以从android清单文件中提取所有信息。您只需运行该命令(使用所需的开关)并解析控制台输出流。

答案 1 :(得分:1)

该文件看起来像是以自定义格式编码,我认为没有可用于解码它的.NET库,因此您必须重写像axml2xml.pl这样的perl脚本来执行此操作为了你。不幸的是,没有一个快速简便的解决方案,但看着它,重写它应该不会太难。

答案 2 :(得分:0)

根据您的XML文档编码,您可以使用Encoding Class

System.Text.Encoding.ASCII.GetString(File.ReadAllBytes(filePath)); *or*
System.Text.Encoding.UTF8.GetString(File.ReadAllBytes(filePath)); *or*
System.Text.Encoding.UTF32.GetString(File.ReadAllBytes(filePath)); etc.

...将您的字节数组转换为人类可读的字符串。也许上面的代码没有显示人类可读字符的原因只是编码?