java sax解析是什么

阅读: 评论:0

java sax解析是什么

java sax解析是什么

MyObjectA

No

4

Honda

No

我的XML采用这种格式.我正在使用SAX解析器来解析此文件,因为xml文件的大小可能很大.

我应该遵循什么模式来解析文件.

通常我一直在遵循这种方法:

//PseudoCode

if(start){

if(type Office)

{

create an instance of type Office and populate the attributes of Office in the Office class using a call back

}

if(type Vehicle)

{

create an instance of type Vehicle and populate the attributes of Vehicle in the Vehicle class using a call back

}

}

if(end){

// do cleaning up

}

这种方法通常使我的解析函数包含起始和结束标记.

还有其他更好的方法可以遵循.

解决方法:

我对这种方法有很好的经验:

>创建查找表以将节点名称映射到处理程序函数.您很可能需要为每个节点名称维护两个处理程序,一个用于开头,一个用于结束标记.

>维护一组父节点.

>从查找表中调用处理程序.

>每个处理函数都可以执行其任务而无需进一步检查.但是如果需要,每个处理程序也可以通过查看父节点堆栈来确定当前上下文.如果节点层次结构中的不同位置具有相同名称的节点,则这一点很重要.

一些伪Java代码:

public class MyHandler extends DefaultHandler {

private Map startLookup = new HashMap();

private Map endLookup = new HashMap();

private Stack nodeStack = new Stack();

public MyHandler() {

// Initialize the lookup tables

startLookup.put("Office", new MyCallbackAdapter() {

public void execute() { myOfficeStart() }

});

endLookup.put("Office", new MyCallbackAdapter() {

public void execute() { myOfficeEnd() }

});

}

public void startElement(String namespaceURI, String localName,

String qName, Attributes atts) {

nodeStack.push(localName);

MyCallbackAdapter callback = (localName);

if (callback != null)

}

public void endElement(String namespaceURI, String localName, String qName)

MyCallbackAdapter callback = (localName);

if (callback != null)

nodeStack.pop();

}

private void myOfficeStart() {

// Do the stuff necessary for the "Office" start tag

}

private void myOfficeEnd() {

// Do the stuff necessary for the "Office" end tag

}

//...

}

一般建议:

根据您的要求,您可能需要更多上下文信息,例如上一个节点名称或当前节点为空.如果您发现自己添加了越来越多的上下文信息,您可能会考虑切换到完整的fletched DOM解析器,除非运行时速度比开发速度更重要.

标签:java,oop,design-patterns

来源: .html

本文发布于:2024-01-28 10:05:05,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064075116649.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:java   sax
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23