<?xml version="1.0" encoding="utf-8" ?>
- <info>
<status>ok</status>
<error />
- <item>
<uid>819789</uid>
<show>好的</show>
<email />
</item>
</info>
- <item>
<uid>819780</uid>
<show>好的2</show>
<email>[email protected]<email>
</item>
- <item>
<uid>819720</uid>
<show>好的3</show>
</item>
</info>
如果status为ok的情况下,就读取item的属性采用org.w3c.dom解析.
刚学JAVA.在XML上就有问题了.上网找了些.呵呵.主要是对于例如<email /> 的值为空或者没有<email>这个节点要如何判断.
这样有什么好处呢?
不能直接就new 一个对象.然后读取某个字节的数据这样吗?
看了好多.有点晕.呵呵.
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();然后parser.pareser(xml的输入流,定义的解析规则handler);
characters
这两个函数里面做数据的操作。 mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse response = null;
try {
response = client.execute(httpPost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String str = null;
try {
str = EntityUtils.toString(response.getEntity());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StringReader reader = new StringReader(str);
InputSource source = new InputSource(reader);
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser paser = factory.newSAXParser();
XMLReader xmlReader = paser.getXMLReader();
DecodeHandler handler = new DecodeHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(source);
} catch (Exception e) {
// TODO: handle exception
}
}
});
}
public class DecodeHandler extends DefaultHandler{ @Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.ignorableWhitespace(ch, start, length);
} @Override
public void notationDecl(String name, String publicId, String systemId) throws SAXException {
// TODO Auto-generated method stub
super.notationDecl(name, publicId, systemId);
} @Override
public void processingInstruction(String target, String data) throws SAXException {
// TODO Auto-generated method stub
super.processingInstruction(target, data);
} @Override
public InputSource resolveEntity(String publicId, String systemId) throws IOException,
SAXException {
// TODO Auto-generated method stub
return super.resolveEntity(publicId, systemId);
} @Override
public void startPrefixMapping(String prefix, String uri) throws SAXException {
// TODO Auto-generated method stub
super.startPrefixMapping(prefix, uri);
} @Override
public void unparsedEntityDecl(String name, String publicId, String systemId,
String notationName) throws SAXException {
// TODO Auto-generated method stub
super.unparsedEntityDecl(name, publicId, systemId, notationName);
} @Override
public void warning(SAXParseException e) throws SAXException {
// TODO Auto-generated method stub
super.warning(e);
} @Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
} @Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub
super.endPrefixMapping(prefix);
} @Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub
super.setDocumentLocator(locator);
} @Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub
super.skippedEntity(name);
} @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
} @Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
}
}
根元素:开始:有两个元素
<elea>aaa</elea>
<eleb>bbb</eleb>下面开始是item:
<item>
<elea>aa</elea>
<eleb>bb</eleb>
</item>
<item>...</item>
要得到一个ItemBean属性a,b怎么处理啊,目前只会用DOM,然后多层循环.
这个的确是个问题,不过我想这个xml应该是楼主自己定义,不会出现
<elea data=aaa></elea>
这样的情况吧。DOM有点慢啊,如果数据量小还是可以接受的。
是有的,其实是一个RSS一样的东西,然后在开头有一个<channel>下面的子节点:
<title>,<date>然后下面的兄弟节点是<item>糟糕的是它里面也有<title>,<date>整体看上去是这样的:
<channel>
<title>bbb</title>
<date>ddd</date>
<item>
<title>aa</title>
<date>bb</date>
还有其它东西..........
</item>
<item>...
</item>
....
</channel>
用了DOM循环三四次是把东西弄出来了,可是这样总觉得不太好,
用SAX不知道如何处理了,如果遇到的是item新建一个Bean然后把这个Bean留着(是局部变量),然后接着是item的子节点,然后一行一行处理,处理结束后这个Bean又被下一个item覆盖,,,,,
写个帮助类;放那边想用就调。
<item>
<id>1</id>
<title><!CDATA[ 含有换行和 空格
的CDATA
]></title>
</item>
SAX遇到不规则的CDATA就挂了