Читать бинарный XML как текст в .NET - PullRequest
1 голос
/ 17 декабря 2010

Файл AndroidManifest.xml при компиляции и упаковке в apk превращается в двоичный файл xml. Я даю эту информацию в случае, если есть разница между этим и обычными двоичными xml файлами, но я не уверен, есть ли.

Мне нужно получить информацию, содержащуюся в этом xml файле. Есть инструменты для java и python, но я ничего не нашел для .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 s при создании BinaryReader, но они не работали.

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Файл - это не просто двоичные данные XML. Существует "формат" для андроида xml.

Вы можете посмотреть на AXMLPrinter2 - он берет двоичный XML и преобразует его в удобочитаемый для человека. Я непосредственно связан с классом, который выглядит так, будто выполняет большую часть работы.

Какая информация вам нужна из файла манифеста? Aapt.exe в Android SDK также может извлечь всю информацию из файла манифеста Android. Вам просто нужно выполнить эту команду (с необходимыми переключателями) и проанализировать поток вывода консоли.

1 голос
/ 17 декабря 2010

Файл выглядит так, как будто он закодирован в произвольном формате, я не думаю, что есть библиотека .NET, доступная для его декодирования, поэтому вам придется переписать сценарий perl, например axml2xml.pl сделать это для вас.К сожалению, нет простого и быстрого решения, но, глядя на него, переписать его не должно быть слишком сложно.

0 голосов
/ 17 декабря 2010

В зависимости от кодировки ваших документов 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.

... для преобразования ваших байтовых массивов в удобочитаемые строки.Возможно, причина, по которой ваш код выше не отображает читаемые человеком символы, заключается просто в кодировке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...