Лучший подход для создания XML в Blackberry
Я создал XML-файл, но не могу его просмотреть / вывести. Я знаю, что нет способа вывести созданный XML-файл.
Может кто-нибудь предложить, пожалуйста, какой лучший способ создания файлов XML? 1. создайте xml с помощью DocumentBuilderFactory, а затем проанализируйте его или 2. вручную создайте жестко закодированный xml и сохраните его на SD-карте, а затем получите доступ к нему для анализа.
У меня есть постоянно меняющиеся текстовые данные в XML-файлах. Какой подход подойдет мне больше всего?
3 ответа
Я использую kXML2 для создания /chage/save/read xml. Используя его с BlackBerry, помните:
- для релиза вы должны предварительно проверить его и собрать proj с помощью ant
Ахмад Фердоус Бин Алам - Как импортировать файл kxml jar в ваш проект
Slashdev - Разработка BlackBerry с помощью Ant & Eclipse
ОБНОВЛЕНИЕ: Учебное пособие: Как использовать сторонние библиотеки в ваших приложениях
- для отладки вы должны добавить исходники kXML и org.xmlpull.v1 в ваш проект BB
Создать XML
Document d = new Document();
Element root = d.createElement("", "parent");
root.setName("catalog");
Element book = d.createElement("", "child");
book.setName("book");
book.setAttribute(null, "id", "1");
Element author = d.createElement("", "child");
author.setName("author");
author.addChild(0, Node.TEXT, "Colin Wilson");
book.addChild(0, Node.ELEMENT, author);
Element title = d.createElement("", "child");
title.setName("title");
title.addChild(0, Node.TEXT, "The Mind Parasites");
book.addChild(1, Node.ELEMENT, title);
Element genre = d.createElement("", "child");
genre.setName("genre");
genre.addChild(0, Node.TEXT, "Horror novel, Science fiction novel");
book.addChild(2, Node.ELEMENT, genre);
Element publishDate = d.createElement("", "child");
publishDate.setName("publish-date");
publishDate.addChild(0, Node.TEXT, "1967");
book.addChild(3, Node.ELEMENT, publishDate);
root.addChild(0, Node.ELEMENT, book);
d.addChild(root.ELEMENT, root);
Сохранить XML в файловой системе BlackBerry
- Если вы используете эмулятор, не забудьте эмулировать SD-карту (Инструменты-> Изменить SD-карту...)
убедитесь, что у вас есть права доступа для операции чтения / записи
String fileName = "file:///SDCard/books.xml"; DataOutputStream os = null; FileConnection fc = null; try { fc = (FileConnection) Connector.open(fileName, Connector.READ_WRITE); if (!fc.exists()) fc.create(); os = fconn.openDataOutputStream(); KXmlSerializer serializer = new KXmlSerializer(); serializer.setOutput(os, "UTF-8"); d.write(serializer); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
Смотрите также:
RIM API - интерфейс FileConnection
SUN Dev Network - Начало работы с API-интерфейсами FileConnection
RIM - How To - Добавить обычный текстовый или двоичные файлы в приложение
Форум поддержки BB - Некоторые вопросы о FileConnection/JSR 75
Форум Sony Ericsson - Создать XML-файл
Читать XML-файл
Document d= new Document();
FileConnection fc = null;
DataInputStream is = null;
try {
fc = (FileConnection) Connector.open(fileName, Connector.READ);
is = fc.openDataInputStream();
KXmlParser parser = new KXmlParser();
parser.setInput(is, "UTF-8");
d.parse(parser);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Смотрите также: RoseIndia.net - Пример J2ME Kxml
Изменить XML-документ
Все, что вам нужно сделать, это получить необходимый элемент и изменить его:
Element catalog = d.getElement("", "catalog");
Element book = catalog.getElement("", "book");
Element title = book.getElement("", "title");
title.removeChild(0);
title.addChild(Element.TEXT, "Spider World: The Tower");
Element publish = book.getElement("", "publish-date");
publish.removeChild(0);
publish.addChild(Element.TEXT, "1987");
Вывести XML-документ на экран BlackBerry (где-то в классе Screen)
Просто сериализовать XML-документ в строку и поместить его в RichTextField:
deleteAll();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
KXmlSerializer serializer = new KXmlSerializer();
try {
serializer.setOutput(baos, "UTF-8");
d.write(serializer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
add(new RichTextField(baos.toString()));
Как насчет использования DOMInternalRepresentation
учебный класс? Несмотря на название, он является частью общедоступного API и существует с JDE 4.0.0. С использованием DOMInternalReprestationClass
Вы можете написать Document
для XMLWriter
,
Например, чтобы написать ByteArrayOutputStream
(что делает его удобным для отправки через Connection
):
ByteArrayOutputStream os = new ByteArrayOutputStream();
XMLWriter xw = new XMLWriter(os);
DOMInternalRepresentation.parse( myDocument, xw );
Естественно, вы можете использовать FileOutputStream
направить вывод XML в файл на диске, а не в байтовый массив.
(Если по какой-то причине вы не можете использовать внешние библиотеки, это выглядит довольно жизнеспособным подходом)
Вы также можете использовать net.rim.device.api.xml.jaxp.XMLWriter, но для этого нужно написать целую страницу кода, если я что-то пропустил?