有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java读取XML文件以仅获取一个值

我试图通过URI内容提供者从xml文件中获取数据,我成功了,但我只想获取一个值,而这种方法对我不起作用。。。使用数组并在中插入所有xml值也是一个好主意

public void requestContent() {
    try {
        Uri singleUri = Uri.parse(APP_XML_URI);
        InputStream instream = getContentResolver().openInputStream(singleUri);
        BufferedReader reader1 = new BufferedReader(new InputStreamReader(instream));
        String MD5;
        try {
            while (( MD5 = reader1.readLine()) != null) {
                try
                {
                    SAXParserFactory factory = SAXParserFactory.newInstance();
                    SAXParser saxParser = factory.newSAXParser();
                    DefaultHandler handler = new DefaultHandler()
                    {
                        boolean MD5_PIN = false;
                        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
                        {
                            if(qName.equalsIgnoreCase("MD5"))
                            {
                                MD5_PIN=true;
                            }
                        }
                        public void characters(char ch[], int start, int length) throws SAXException
                        {
                            if (MD5_PIN)
                            {
                                String  MD5_SPIN = new String(ch, start, length);
                                appContent.append("TEST \n");
                                appContent.append(MD5_SPIN + "\n");
                                MD5_PIN = false;
                            }
                        }

                    };
                    saxParser.parse(new InputSource(new StringReader(MD5)), handler);
                    //new InputSource(new StringReader(MD5))
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                appContent.append(MD5 + "\n");
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    好的,这个方法看起来有点奇怪

    如果我正确理解了代码,它将一次读取一行输入,并创建一个SAX解析器来解析每一行

    假设URI解析为普通的XML文档1,这是行不通的。第一行将由一个部分XML文档组成,解析器(可能)将在该行末尾失败。第二行由XML文档中间的文本组成,解析器(可能)会在开始时失败。。。因为它正在解析的“XML”格式不正确

    (代码还有其他问题,但我认为这是由于它的“概念证明”性质…)

    所以我认为你应该做的是(高水平!):

    1. 编写一个SAX解析事件处理程序,当解析器遇到您要查找的一个元素时,该事件处理程序会导致解析器终止

    2. 使用直接从BufferedReader读取的InputSource实例化解析器

    3. 当解析器终止时(无论出于何种原因),请确保BufferedReader已关闭


    1-如果输入“document”的每一行都是一个完整的自包含XML文档,那么这种方法将起作用