org.xml.sax.SAXParseException:处理指令不能以 xml 开头

Posted

技术标签:

【中文标题】org.xml.sax.SAXParseException:处理指令不能以 xml 开头【英文标题】:org.xml.sax.SAXParseException: processing instructions must not start with xml 【发布时间】:2017-12-24 11:31:18 【问题描述】:

我在解析写入和读取 xml 文件时遇到此错误。

这些是用于写入和读取的函数:

protected void write_xml_file(String file_name) 
    //if (file_name == null) file_name = "spells.xml";
    FileOutputStream fos;
    try 
        fos = openFileOutput(file_name, Context.MODE_APPEND);
        XmlSerializer serializer = Xml.newSerializer();
        serializer.setOutput(fos, "UTF-8");
        serializer.startDocument(null, Boolean.valueOf(true));
        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
        serializer.startTag(null, "spells");
        for (int j = 0; j < 3; j++) 
            serializer.startTag(null, "spell");
            serializer.text("asd" +j);
            serializer.endTag(null, "spell");
        
        serializer.endDocument();
        serializer.flush();
        fos.close();
     catch (FileNotFoundException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
    




protected void read_xml_file(String file_name,Context context) 
    try 
        String path=context.getFilesDir() + File.separator + file_name;
        File fXmlFile = new File(context.getFilesDir() + File.separator + file_name);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = null;
        dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();
        NodeList nList = doc.getElementsByTagName("spells");


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

            Node nNode = nList.item(temp);

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

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

                Element eElement = (Element) nNode;

                //System.out.println("spell id : " + eElement.getAttribute("id"));
                //System.out.println("name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
                //System.out.println("description : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
                //System.out.println("school : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());

            
        


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

这是错误:

org.xml.sax.SAXParseException:处理指令不能启动 使用 xml(位置:java.io.InputStreamReader@b64434e 中的未知 @6:10)

【问题讨论】:

您需要发布您的 xml,看起来这就是问题所在,而不是代码。 我的 xml 被写入内部存储,我不知道如何获取它 【参考方案1】:

org.xml.sax.SAXParseException:处理指令不能以xml开头(位置:未知@6:10 in java.io.InputStreamReader@b64434e)

您的 XML 文件中似乎有 &lt;?xml version="1.0" encoding="utf-8"?&gt;。删除它然后尝试!

【讨论】:

这是要删除的标签吗?serializer.setOutput(fos, "UTF-8"); @Nevarim 是的,删除它【参考方案2】:

当您在流中多次(至少两次)加载文件然后尝试解析它时,通常会发生此错误。检查你是否没有在 fXmlFile 中两次加载文件

【讨论】:

以上是关于org.xml.sax.SAXParseException:处理指令不能以 xml 开头的主要内容,如果未能解决你的问题,请参考以下文章