gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:06:37 25 4
gpt4 key购买 nike

我正在使用 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 对象并将每个对象添加到一个 vector 中...每个 Element 对象都包含自己的 String 值(来自根节点中找到的子节点。

我知道如何解析元素和所有这些细节,但是有人可以向我展示如何构建 ContentHandler 以允许上述算法的示例吗?

谢谢!

最佳答案

您不能按照您的建议编写带有循环的处理程序。它确实是基于事件的,因此您需要自己在处理程序中跟踪 currentQueuecurrentElement 。还要注意,每个标签可能会多次调用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;
}
}

关于Java SAX ContentHandler 为每个根节点创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2445547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com