2012-03-16 40 views
0

我基本上與我的DOM對象與我想要的數據堅持,我試圖將其輸出到字符串。在這裏我在這裏使用解析我的XML文件中的代碼:Android的DOM對象字符串

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> 

+0

你嘗試添加在你的另一'抓block'捕捉其他異常,看看是否打印堆棧跟蹤? – iTurki 2012-03-16 02:35:38

+0

嗨iturki,我添加了異常,但調試器仍然跳過它。任何其他想法? – roboto1986 2012-03-16 02:54:13

+0

然後試試這個:在catch塊外面移動'null return'。我不習慣返回null。這可能是問題的原因。考慮返回一個空字符串或用戶定義的字符串。 – iTurki 2012-03-16 10:46:31

回答

0

參考簡單的XML框架,它會更容易與XML序列化反對作品。

下面是示例說明ü有關它的用途...

序列化的簡單對象 爲了序列化對象到XML一系列的註釋必須放在該對象之內。這些註釋告訴persister如何對象序列化。例如,參加下面的課程。這裏有三種不同的註釋,一種用於描述根元素的名稱,一種描述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是必需的。 persister對象然後被賦予一個註釋對象的實例和一個輸出結果,這是本例中的一個文件。其他輸出格式可以用persister對象來實現。

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

serializer.write(example, result); 

希望這回答了烏拉圭回合的問題..

+0

Siranjeevi,我修改了我的問題以包含我正在嘗試處理的數據模型。我想我同意你的看法,我需要使用更簡單的xml框架工作。你有一個好的經驗嗎? – roboto1986 2012-03-16 02:55:49