2014-03-12 56 views
1

我想解析來自服務的「內容」類型的內容。如何使用utf-8編碼解析來自服務的XML特殊字符

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 
myXMLHandler = new XMLHandler(); 
xr.setContentHandler(myXMLHandler); 
URL _url = new URL(params[0]); 
xr.parse(new InputSource(_url.openStream())); 
+0

你更多地解釋你的代碼有什麼問題?什麼不工作?目前的結果是什麼,預期的結果是什麼? –

+0

我已經完成了從服務中解析字符串的工作,但它無法顯示服務中存在的特殊字符。 [鏈接](http://182.160.161.2/~siva/turkish/web_serv/category.php?order_by=desc&category_id=2)。你可以指導我這樣做。 – Jenefer

+0

我檢查了你的鏈接,我用DOM解析器試了一下,它工作的很好,我也可以閱讀那些土耳其文字,並在textview上顯示它。 :) – TheLittleNaruto

回答

1

我試過DOM Parser而不是XaxParser。檢查下面的函數,並調用它內部的後臺線程:

public String readXML(){ 
     StringBuilder stringBuilder = new StringBuilder(); 
     try { 
       URL _url = new URL("http://182.160.161.2/~siva/turkish/web_serv/category.php?order_by=desc&category_id=2"); 
       File fXmlFile = new File(new InputSource(_url.openStream()).getByteStream().toString()); 
       DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
       Document doc = dBuilder.parse(new InputSource(_url.openStream()).getByteStream()); 

       //optional, but recommended 
       //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work 
       doc.getDocumentElement().normalize(); 

       System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

       NodeList nList = doc.getElementsByTagName("document"); 

       Node nResp = nList.item(0); 
       Element fstElmnt = (Element) nResp; 
       NodeList nameList1 = fstElmnt.getElementsByTagName("response"); 

       Node mCat = nameList1.item(0); 
       Element catElmt = (Element) mCat; 

       NodeList catList = catElmt.getElementsByTagName("category"); 

       System.out.println("----------------------------"); 

       for (int temp = 0; temp < catList.getLength(); temp++) { 

        Node nNode = catList.item(temp); 

        System.out.println("\nCurrent Element :" + nNode.getNodeName()); 

        if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

         Element eElement = (Element) nNode; 

         stringBuilder.append("Category ID : " + eElement.getElementsByTagName("category_name").item(0).getTextContent()+"\n"); 
         stringBuilder.append("Category Name : " + eElement.getElementsByTagName("category_id").item(0).getTextContent()); 
         System.out.println("Category ID : " + eElement.getElementsByTagName("category_name").item(0).getTextContent()); 
         System.out.println("Category Name : " + eElement.getElementsByTagName("category_id").item(0).getTextContent()); 


        } 
       } 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 
       return stringBuilder.toString(); 

    } 

這裏是我的設備的屏幕截圖,看看: 你可以看到那些土耳其語太:)

enter image description here

莫非
+0

我應該提到,在答案中,而不是調用getNodeValue(),我已經調用了getTextContent()。那完成了任務。 :) – TheLittleNaruto