0

我基本上被我的 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 级别都可以。

谢谢!--Edit-- 这是我要处理的结构。基本上,想法是使用 .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>

4

1 回答 1

0

参考简单的 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);

希望这能回答你的问题..

于 2012-03-16T02:28:36.277 回答