편집 :이 코드는 문제가 없습니다. 내 의사 코드에 존재하지 않는 어딘가에 로직 버그를 발견했습니다. 나는 자바 경험 부족으로 그것을 비난했다.자바 벡터 필드 (전용 멤버) 축약 기가 나의 암소를 저장하지 않습니다!
아래의의사 코드에서 나는 XML을 구문 분석하려고합니다. 어리석은보기일지도 모르지만 내 코드가 너무 커서 특정 사람이 그것을보고 실제 답변을 통해 실제 가치를 얻지 못했습니다. 그래서 이것은 더 재미 있고, 다른 사람들도 저뿐만 아니라 대답에서 배울 수 있기를 바랍니다.
저는 Java를 처음 접했지만 경험이 풍부한 C++ 프로그래머입니다. 제 문제는 Java 언어에 대한 이해에 있습니다.
문제점 : 파서가 완료되면 내 벡터에 초기화되지 않은 Cow가 가득합니다. 나는 C++ STL Vector와 같은 기본 용량을 가진 Cows를 만듭니다. 구문 분석 후에 Cow Vector의 내용을 출력하면 Vector의 크기가 적절하지만 모든 값이 설정되지 않은 것처럼 보입니다.
Info : Vector가없는 다른 파서로이 작업을 성공적으로 마쳤습니다. 필드이 경우 Vector를 사용하여 Cow 속성을 축적하고 싶습니다.
MoreInfo : generics (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;
}
}
}
Java에서 SAX 파서에 대한 참조가 있습니까? 나는 작고 빠른 것이 최우선 과제이므로 블랙 베리를 위해 글을 쓰고있다. –
또한 이것은 org.xml.sax.helpers.DefaultHandler의 오버 라이드입니다. –
표준 파서와 비슷하지만 실제 클래스인지 또는 C++ SAX 파서의 개별 번역인지 확실하지 않습니다. .. 여전히 유효성이 확인되지 않으면 지저분한 XML을 처리 할 수있는 무언가가 필요하다고 생각합니다. 아파치 소화기를보고 ... – Uri