Java 解析俄语XML检索NullPointerException SAXParser

Java 解析俄语XML检索NullPointerException SAXParser,java,android,xml,Java,Android,Xml,我使用SAXParser来解析包含俄语字符的XML。 XML如下所示: ... <exercise> <ID>2</ID> <training_types_id>1</training_types_id> <Name>Тройки</Name> <last_modified>0000-00-00 00:00:00</last_modified&

我使用SAXParser来解析包含俄语字符的XML。 XML如下所示:

   ...
   <exercise>
     <ID>2</ID>
     <training_types_id>1</training_types_id>
     <Name>Тройки</Name>
     <last_modified>0000-00-00 00:00:00</last_modified>
     <del_check>0</del_check>
   </exercise>
   ...
服务器以这种方式对数据进行编码:

        if (is_null($DOMDocument)) {
        $DOMDocument =new DOMDocument('1.0', 'UTF-8');
        $DOMDocument->formatOutput = true;
        $this->xml_encode($mixed, $DOMDocument, $DOMDocument);
        return $DOMDocument->saveXML();
HttpEntity entity = res.getEntity();
websiteData = EntityUtils.toString(entity, "UTF-8");
    private static Document ParseXMLString(String xmlString) {

    // fix encoding problem
    xmlString = xmlString.replaceAll("[^\\x20-\\x7e]", "");

    DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    Document doc = null;

    try {
        InputSource inStream = new InputSource(); 
        inStream.setCharacterStream(new StringReader(xmlString));
        //inStream.setEncoding("UTF8");

        db = factory.newDocumentBuilder();
        doc = db.parse(inStream);

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }

    return doc;
}
我通过以下方式接收数据:

        if (is_null($DOMDocument)) {
        $DOMDocument =new DOMDocument('1.0', 'UTF-8');
        $DOMDocument->formatOutput = true;
        $this->xml_encode($mixed, $DOMDocument, $DOMDocument);
        return $DOMDocument->saveXML();
HttpEntity entity = res.getEntity();
websiteData = EntityUtils.toString(entity, "UTF-8");
    private static Document ParseXMLString(String xmlString) {

    // fix encoding problem
    xmlString = xmlString.replaceAll("[^\\x20-\\x7e]", "");

    DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    Document doc = null;

    try {
        InputSource inStream = new InputSource(); 
        inStream.setCharacterStream(new StringReader(xmlString));
        //inStream.setEncoding("UTF8");

        db = factory.newDocumentBuilder();
        doc = db.parse(inStream);

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }

    return doc;
}
按以下方式进行分析:

        if (is_null($DOMDocument)) {
        $DOMDocument =new DOMDocument('1.0', 'UTF-8');
        $DOMDocument->formatOutput = true;
        $this->xml_encode($mixed, $DOMDocument, $DOMDocument);
        return $DOMDocument->saveXML();
HttpEntity entity = res.getEntity();
websiteData = EntityUtils.toString(entity, "UTF-8");
    private static Document ParseXMLString(String xmlString) {

    // fix encoding problem
    xmlString = xmlString.replaceAll("[^\\x20-\\x7e]", "");

    DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    Document doc = null;

    try {
        InputSource inStream = new InputSource(); 
        inStream.setCharacterStream(new StringReader(xmlString));
        //inStream.setEncoding("UTF8");

        db = factory.newDocumentBuilder();
        doc = db.parse(inStream);

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }

    return doc;
}
黎明错误:

03-21 06:12:09.227: W/System.err(12256): java.lang.reflect.InvocationTargetException
03-21 06:12:09.228: W/System.err(12256):    at java.lang.reflect.Method.invokeNative(Native Method)
03-21 06:12:09.228: W/System.err(12256):    at java.lang.reflect.Method.invoke(Method.java:511)
03-21 06:12:09.229: W/System.err(12256):    at com.ms.mastersportApp.parsers.AppParser.inParseData(AppParser.java:58)
03-21 06:12:09.229: W/System.err(12256):    at com.ms.mastersportApp.synchronization.Synchronization.SynchronizeDown(Synchronization.java:165)
03-21 06:12:09.229: W/System.err(12256):    at com.ms.mastersportApp.threads.SyncThread.doInBackground(SyncThread.java:131)
03-21 06:12:09.230: W/System.err(12256):    at com.ms.mastersportApp.threads.SyncThread.doInBackground(SyncThread.java:1)
03-21 06:12:09.230: W/System.err(12256):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
03-21 06:12:09.230: W/System.err(12256):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-21 06:12:09.231: W/System.err(12256):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-21 06:12:09.231: W/System.err(12256):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
03-21 06:12:09.231: W/System.err(12256):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-21 06:12:09.232: W/System.err(12256):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-21 06:12:09.232: W/System.err(12256):    at java.lang.Thread.run(Thread.java:856)
03-21 06:12:09.232: W/System.err(12256): Caused by: java.lang.NullPointerException
03-21 06:12:09.233: W/System.err(12256):    at com.ms.mastersportApp.parsers.XmlParser.ParseXMLExercisesStr(XmlParser.java:179)
03-21 06:12:09.233: W/System.err(12256):    at com.ms.mastersportApp.parsers.XmlParser.ParseXMLExercises(XmlParser.java:131)

堆栈跟踪显示NPE位于
parseXmlExecuteSSTR(XmlParser.java:179)
。你为什么不给我们看那个代码?注意,这就是异常的来源。旁注:您的“服务器代码”看起来不像Java。。。“修复编码问题”可能表示您创建的任何“XML”都不是真正有效的XML…这是一个dom解析器?字符串exerciseNameValue=exerciseNameElement.getFirstChild().getNodeValue();这是ParseXMLExercisesStr。我告诉过你,飞机在那里坠毁了。所有其他代码都运行良好。只有当相同的代码遇到俄文字符时才会崩溃。服务器代码是PHP。我使用一个内部PHP类来格式化输出xml。你为什么说那是无效的?