Android DOM объект в строку
Я в основном застрял с моим объектом DOM с данными, которые я хочу, и я пытаюсь вывести это в строку. Вот код, который я использую для анализа моего xml-файла:
public ORGRTools insertUserNameAndPassword(String userName, String password)
{
try {
DocumentBuilderFactory factory= DocumentBuilderFactory.newInstance();
docBuilder = factory.newDocumentBuilder();
dom = docBuilder.parse (new File("/mnt/sdcard/Commands.xml"));
NodeList items = dom.getElementsByTagName("login");
for (int i = 0; i < items.getLength(); i++) {
Node item = items.item(i);
NodeList properties = item.getChildNodes();
for (int j = 0; j < properties.getLength(); j++) {
Node property = properties.item(j);
String name = property.getNodeName();
if (name.equalsIgnoreCase("userName")) {
property.getFirstChild().setNodeValue(userName);
}
if (name.equalsIgnoreCase("password")) {
property.getFirstChild().setNodeValue(password);
}
}
}
} catch (SAXException e) {
// TODO Auto-generated catch block
//invalid character in xml
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return this;
}
При этом у меня есть следующая функция, которая использует переменную-член dom из предыдущего кода выше, чтобы попытаться получить ее строковое представление:
public String serialize()
{
try
{
DOMSource domSource = new DOMSource(dom);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
String retVal= writer.toString();
return retVal;
}
catch(TransformerException ex)
{
//exception here but does not print stack trace... weird
ex.printStackTrace();
return null;
}
}
Однако я получаю следующее исключение (см. Комментарий). Кто-нибудь знает, что происходит? Почему преобразование в строку не выполняется? Я застрял в этом на несколько часов, поэтому любая помощь будет хорошей. Любой уровень API в порядке.
Спасибо! - Редактировать-- Вот структура, которую я пытаюсь обработать. По сути, идея состоит в том, чтобы установить одну из этих моделей вместе с.apk и обеспечить связь этих моделей с сервером. Поэтому мне нужно заполнить данные учетных данных пользователя:
<commands>
<login>
<userName>itemstr</userName>
<password>itemstr</password>
</login>
<analyse>
<imageName>itemstr</imageName>
<imageHeight>itemnum</imageHeight>
<imageWidth>itemnum</imageWidth>
<recordID>itemstr</recordID>
</analyse>
<retrieve>
<record>itemnum</record>
</retrieve>
1 ответ
Обратимся к простой фреймворк XML, будет проще работать с сериализацией XML для объекта.
Вот пример, чтобы объяснить вам о его использовании...
Сериализация простого объекта Чтобы сериализовать объект в XML, в этот объект необходимо поместить серию аннотаций. Эти аннотации говорят о том, как объект должен быть сериализован. Например, возьмите класс, показанный ниже. Здесь есть три разные аннотации, одна используется для описания имени корневого элемента, другая описывает элемент сообщения XML и последняя аннотация для атрибута id.
@Root
public class Example {
@Element
private String text;
@Attribute
private int index;
public Example() {
super();
}
public Example(String text, int index) {
this.text = text;
this.index = index;
}
public String getMessage() {
return text;
}
public int getId() {
return index;
}
}
Для сериализации экземпляра вышеупомянутого объекта требуется Persister. Затем персистентному объекту дается экземпляр аннотированного объекта и выходной результат, который в этом примере является файлом. Другие выходные форматы возможны с постоянным объектом.
Serializer serializer = new Persister();
Example example = new Example("Example message", 123);
File result = new File("example.xml");
serializer.write(example, result);
Надеюсь, что это отвечает на ваш вопрос..