Java SAX ContentHandler为每个根节点创建新对象
问题描述:
我正在使用SAX来解析某些XML。比方说,我有以下XML文档:Java SAX ContentHandler为每个根节点创建新对象
<queue>
<element A> 1 </element A>
<element B> 2 </element B>
</queue>
<queue>
<element A> 1 </element A>
<element B> 2 </element B>
</queue>
<queue>
<element A> 1 </element A>
<element B> 2 </element B>
</queue>
而且我也有一个要素类:
public static Elements {
String element;
public Elements() {
}
public void setElement(String element){
this.element = element;
}
public String getElement(){
return element;
}
}
我期待编写遵循以下算法的ContentHandler:
Vector v;
for every <queue> root node {
Element element = new Element();
for every <element> child node{
element.setElement(value of current element);
}
v.addElement(element);
}
所以,我想创建一堆Element对象并将它们添加到一个向量中...每个Element对象都包含它自己的String值(来自在根节点内找到的子节点
我知道如何解析元素和所有这些细节,但有人可以告诉我一个如何构建我的ContentHandler以支持上述算法的示例吗?
谢谢!
答
您不能按照您的建议使用循环编写处理程序。这是真的基于事件的,所以你需要跟踪你的处理程序中的currentQueue
和currentElement
。也要注意characters
可能会被称为每个标签不止一次(还有关于这一点的其他问题)。
因此,这里是一个非常粗略的草图:
Queue currentQueue;
Element currentElement;
startElement(node){
if(node is queue)
currentQueue = new Queue();
else if(node is element)
currentElement = new Element();
}
characters(chars) {
currentElement.setName(chars);
}
endElement(node){
if(node is queue)
currentQueue = null;
else if(node is element) {
currentQueue.add(currentElement); <-- that's the important part
currentElement = null;
}
}
这对我来说很有意义。非常感谢您的帮助! – littleK 2010-03-15 07:34:10