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 楼答案
好的,这个方法看起来有点奇怪
如果我正确理解了代码,它将一次读取一行输入,并创建一个SAX解析器来解析每一行
假设URI解析为普通的XML文档1,这是行不通的。第一行将由一个部分XML文档组成,解析器(可能)将在该行末尾失败。第二行由XML文档中间的文本组成,解析器(可能)会在开始时失败。。。因为它正在解析的“XML”格式不正确
(代码还有其他问题,但我认为这是由于它的“概念证明”性质…)
所以我认为你应该做的是(高水平!):
编写一个SAX解析事件处理程序,当解析器遇到您要查找的一个元素时,该事件处理程序会导致解析器终止
使用直接从
BufferedReader
读取的InputSource实例化解析器当解析器终止时(无论出于何种原因),请确保
BufferedReader
已关闭1-如果输入“document”的每一行都是一个完整的自包含XML文档,那么这种方法将起作用