Java SAX ContentHandler为每个根节点创建新对象

Java SAX ContentHandler为每个根节点创建新对象,java,xml,sax,Java,Xml,Sax,我正在使用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

我正在使用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>
我希望编写一个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);
}
向量v; 对于每个根节点{ 元素=新元素(); 对于每个子节点{ element.setElement(当前元素的值); } v、 附加元素(元素); } 因此,我想创建一组元素对象,并将它们添加到一个向量中……每个元素对象都包含自己的字符串值(来自根节点中的子节点)

我知道如何解析元素和所有这些细节,但是有人能给我一个示例,说明如何构造ContentHandler以支持上述算法吗


谢谢!

您不能按照建议使用循环编写处理程序。它实际上是基于事件的,因此您需要跟踪处理程序中的
currentQueue
currentElement
您自己。还要注意,每个标记调用
字符可能不止一次(关于这一点还有其他问题)

这是一个非常粗略的草图:

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; 
  }
}
Queue-currentQueue;
元素电流元素;
startElement(节点){
if(节点是队列)
currentQueue=新队列();
else if(节点是元素)
currentElement=新元素();
}
字符(字符){
currentElement.setName(字符);
}
endElement(节点){
if(节点是队列)
currentQueue=null;
else if(节点是元素){

添加(currentElement);这对我来说很有意义。非常感谢您的帮助!
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; 
  }
}