我正在使用SAX来解析一些XML。假设我有以下XML文档:
<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>
我还有一个Elements类:
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以允许上述算法的示例吗?
谢谢!
答案 0 :(得分:1)
您无法按照建议使用循环编写处理程序。它实际上是基于事件的,因此您需要在处理程序中自己跟踪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;
}
}