Android DOM объект в строку - PullRequest
0 голосов
/ 16 марта 2012

Я в основном застрял с моим объектом 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 Ответ

0 голосов
/ 16 марта 2012

Обратитесь к простому фреймворку 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;
   }
}

Для сериализации экземпляранад объектом персистер требуется.Затем персистентному объекту дается экземпляр аннотированного объекта и выходной результат, который в этом примере является файлом.Возможны другие форматы вывода с сохраняемым объектом.

Serializer serializer = new Persister();
Example example = new Example("Example message", 123);
File result = new File("example.xml");

serializer.write(example, result);

Надеюсь, это ответит на ваш вопрос ..

...