2011-08-17 96 views
1

我正在使用DOM解析XML字符串,如下例所示。除了一個例外,這很好。而我試圖解析該文件看起來是這樣的:解析包含超鏈接的xml字符串

<response requestID=\"1234\"> 
    <expectedValue>Alarm</expectedValue> 
    <recommendations>For steps on how to resolve visit <a href=\"some website\">Website</a> and use the search features for \"Alarm\"<recommendations> 
    <setting>Active</setting> 
<response> 

我用來解析XML的代碼如下:

try { 
     DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xmlResult)); 

     Document doc = db.parse(is); 
     NodeList nlResponse = doc.getElementsByTagName("response"); 

     String[] String = new String[3]; //result entries 

     for (int i = 0; i < nlResponse.getLength(); i++) { 
      Element e = (Element) nlResponse.item(i); 
      int c1 = 0; //count for string array 

      NodeList ev = e.getElementsByTagName("expectedValue"); 
      Element line = (Element) ev.item(0); 
      String[c1] = (getCharacterDataFromElement(line)); 
      c1++; 

      NodeList rec = e.getElementsByTagName("recommendations"); 
      line = (Element) rec.item(0); 
      String[c1] = (getCharacterDataFromElement(line)); 
      c1++; 

      NodeList set = e.getElementsByTagName("settings"); 
      line = (Element) set.item(0); 
      String[c1] = (getCharacterDataFromElement(line)); 
      c1++; 

我能夠解析代碼,並把結果變成一個字符串數組(而不是System.out.println())。在當前的代碼,我的字符串數組如下所示:

String[0] = "Alarm" 
String[1] = "For steps on how to resolve visit" 
String[2] = "Active" 

我想是能夠以最終顯示的超級鏈接(與其他輸出一起「建議」中讀出的信息,其餘的一些方法)在TextView中。我怎樣才能做到這一點?

+0

我想沒有人能回答這個問題,沒有看到你的代碼(短寫東西的同時給你的)後 – Mat

+0

對不起......我的意思是張貼此鏈接。我的代碼(解析)看起來基本相同。 http://www.java2s.com/Code/Java/XML/ParseanXMLstringUsingDOMandaStringReader.htm – Greg

+0

編輯您的問題以包含_actual_代碼的_relevant_部分。 – Mat

回答

1

對於我之前的回答,我假設你的xml格式不正確,對此表示歉意。

我認爲發生的事情是,您對getCharacterDataFromElement的調用僅查看文本的第一個子節點,何時需要查看所有子節點並獲取href屬性以及文本第二個子節點在查看推薦節點時。

例如獲得元素推薦

  String srec = ""; 
      NodeList nl = line.getChildNodes(); 
      srec += nl.item(0).getTextContent(); 

      Node n = nl.item(1); 
      NamedNodeMap nm = n.getAttributes(); 
      srec += "<a href=\"" + nm.getNamedItem("href").getTextContent() + "\">" + n.getTextContent() + "</a>"; 

      srec += nl.item(2).getTextContent(); 

      String[c1] = srec; 
+0

當前片段*是*有效的xml。 –

+0

我的錯誤是,我的印象是文本不能出現在父節點旁邊的子節點中。 – scott

+0

+1:通過您的編輯,我相信您的回答現在是正確的。 –