Java SAX ContentHandler为每个根节点创建新对象
我正在使用SAX解析一些XML。假设我有以下XML文档: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
<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;
}
}