2013-02-15 54 views
1

我有一個XML是UTF-8,在中國的一些特殊字符,我需要解析這個XML。UTF-8 UTF16解析

DocumentBuilderFactory factory = DocumentBuilderFactory 
        .newInstance(); 
factory.setIgnoringElementContentWhitespace(true); 
factory.setNamespaceAware(true); 
factory.setValidating(true); 

//byte[] buffer = xmlMsg.getBytes("UTF-16"); 

logger.info("transformToUTP " + xmlMsg); 


//byte[] buffer = soapMessage.getBytes(); 
//ByteArrayInputStream stream = new ByteArrayInputStream(buffer);    


InputSource is = new InputSource(new ByteArrayInputStream(
        xmlMsg.getBytes("UTF-16"))); 

Document doc = factory.newDocumentBuilder().parse(is); 
//Document doc = factory.newDocumentBuilder().parse(
        new InputSource(new StringReader(xmlMsg)));        

XPath xpath = XPathFactory.newInstance().newXPath(); 
xpath.setNamespaceContext(getNameSpace()); 

XPathExpression soapBodyExpr = xpath.compile(BODY_XPATH_EXP); 
Node soapBody = (Node) soapBodyExpr.evaluate(doc, 
      XPathConstants.NODE); 

Node reqMsgNode = soapBody.getFirstChild(); 

我在reqMsgNode上得到一個空指針異常。

+0

你爲什麼要轉換您的XML轉換爲字符串?那是你的第一個問題。 – jtahlborn 2013-02-15 02:17:57

回答

1

不要將XML轉換成字符串,解析它,則使用

DocummentBuilder.parse(File)DocumentBuilder.parse(InputStream)

解析器將採取從編碼XML聲明例如<?xml version="1.0" encoding="UTF-8"?>,如果缺少那麼它將使用UTF-8在默認情況下

+0

我把XML作爲字符串。所以在那裏沒有選擇.. – Guest 2013-02-15 21:57:22