编辑:这段代码很好。我在我的伪代码中不存在的某个地方发现了一个逻辑错误。我将其归咎于我缺乏 Java 经验。
在下面的伪代码中,我试图解析显示的 XML。也许是一个愚蠢的例子,但我的代码太大/太具体,任何人都无法从看到它并从发布的答案中学习得到任何真正的价值。所以,这更有趣,希望其他人和我一样可以从答案中学习。
我是 Java 新手,但我是一位经验丰富的 C++ 程序员,这让我相信我的问题在于我对 Java 语言的理解。
问题:当解析器完成时,我的向量充满了未初始化的奶牛。我创建了具有默认容量的奶牛向量(如果它类似于 C++ STL 向量,则不应该影响它的“大小”)。当我在解析后打印出 Cow Vector 的内容时,它给出了正确的 Vector 大小,但所有值似乎从未设置过。
信息:我已经使用其他没有 Vector字段的解析器成功完成了此操作,但在这种情况下,我想使用 Vector 来累积 Cow 属性。
MoreInfo:我不能使用泛型(Vector< Cow >)所以请不要指向我那里。:)
提前致谢。
<pluralcow>
<cow>
<color>black</color>
<age>1</age>
</cow>
<cow>
<color>brown</color>
<age>2</age>
</cow>
<cow>
<color>blue</color>
<age>3</age>
</cow>
</pluralcow>
public class Handler extends DefaultHandler{
// vector to store all the cow knowledge
private Vector m_CowVec;
// temp variable to store cow knowledge until
// we're ready to add it to the vector
private Cow m_WorkingCow;
// flags to indicate when to look at char data
private boolean m_bColor;
private boolean m_bAge;
public void startElement(...tag...)
{
if(tag == pluralcow){ // rule: there is only 1 pluralcow tag in the doc
// I happen to magically know how many cows there are here.
m_CowVec = new Vector(numcows);
}else if(tag == cow ){ // rule: multiple cow tags exist
m_WorkingCow = new Cow();
}else if(tag == color){ // rule: single color within cow
m_bColor = true;
}else if(tag == age){ // rule: single age within cow
m_bAge = true;
}
}
public void characters(...chars...)
{
if(m_bColor){
m_WorkingCow.setColor(chars);
}else if(m_bAge){
m_WorkingCow.setAge(chars);
}
}
public void endElement(...tag...)
{
if(tag == pluralcow){
// that's all the cows
}else if(tag == cow ){
m_CowVec.addElement(m_WorkingCow);
}else if(tag == color){
m_bColor = false;
}else if(tag == age){
m_bAge = false;
}
}
}