| 文章索引 |
|---|
| 基于J2ME的SVGT移动手机应用 |
| 2 什么是Mobile SVG标准 |
| 3 J2ME应用及其规范扩展 |
| 4 J2ME开发平台 |
| 5 JSR-226技术规范和应用 |
| 6 使用JSR-172解析XML数据 |
| 7 一个简单的SVG MIDP应用 |
| 8 Mobile SVG总结与参考资料 |
| 所有页面 |
使用SVG 不可避免的要涉及XML的解析和使用。JSR-172是J2ME下访问WEB服务的标准API,提供了一个标准的轻量级XML解析器。JSR-172实现了JAXP1.2(Java API for XML Processing)的一个子集,支持SAX2.0。在JSR-172中使用SAX方式处理XML数据,相比DOM的处理方式更加节省内存,因此在同样的硬件条件下,SAX能够处理更大的XML文档或数据。JSR-172中包括3个包,其中javax.xml.parsers 包括SAX解析器,工厂和异常类;org.xml.sax中包括核心SAX API;org.xml.sax.helpers中包括多种辅助类。
此外 ,用户还可以使用KXML等XML解析器在J2ME应用程序中处理XML数据,尤其是在平台不支持JSR-172的时候。
以下是使用SAX解析XML的具体实例,其中省略了一些代码。首先创建SAX处理器类。
class BasicHandler extends DefaultHandler
{
private Stack tagStack = new Stack();
public BasicHandler (){}
public void startDocument() throws SAXException {}
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName.equals("AAA")) { /*数据处理*/}
tagStack.push(qName);
}
public void characters(char[] ch, int start, int length) throws SAXException {
String chars = new String(ch, start, length).trim();
if(chars.length() > 0){
String qName = (String)tagStack.peek();
if (qName.equals("BBB")) { /*数据处理*/}
}
}
public void endElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
tagStack.pop();
}
public void endDocument() throws SAXException { }
}
之后装入一个XML文件并指定为此前定义的SAX处理器。
try
{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
FileConnection fc = (FileConnection) Connector.open("file:///root1/phones.xml");
InputStream is = fc.openInputStream();
InputSource inputSource = new InputSource(is);
saxParser.parse(is,new BasicHandler(this));
}
catch(Exception ex) {}
我们也可以从一个输入流中加载XML,例如从一个XML字符串:
InputStream is = new ByteArrayInputStream(xmlString.getBytes(), 0, xmlString.length());
InputSource inputSource = new InputSource(is);
saxParser.parse(is,new BasicHandler(svgCanvas));