編集:このコードは問題ありません。疑似コードに存在しないロジックのバグがどこかに見つかりました。私はJavaの経験が不足していることを非難していました。
以下の疑似コードでは、表示されている XML を解析しようとしています。ばかげた例かもしれませんが、私のコードは大きすぎたり具体的すぎたりして、誰もそれを見て投稿された回答から学ぶことから真の価値を得ることができませんでした. だから、これはもっと面白いですし、うまくいけば他の人も私と同じように答えから学ぶことができます.
私は Java は初めてですが、経験豊富な C++ プログラマーであるため、私の問題は Java 言語の理解にあると信じています。
問題: パーサーが終了すると、Vector は初期化されていない Cow でいっぱいです。デフォルトの容量で牛のベクターを作成します (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;
}
}
}