以下塊會給你YYYY或YYYY/MM或根據您的XML是什麼樣子YYYY/MM/DD的格式,它處理一些錯誤情況。然後,您可以轉向並將其格式化爲java.util.Date對象或任何您想要使用的對象。
在實施任何SAX過濾/處理時,請務必記住,您應該始終對任何攔截的事件調用「超級」,以確保您將事件傳遞給任何下游處理程序,否則它們將從流中消失,有人在某個時候會遇到一些麻煩。
StringBuilder buf = null;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ("month".equals(localName) || "day".equals(localName)) {
if (buf != null) {
buf.append("/");
} else {
throw new SAXException("something went wrong, we received a month and day outside a start-date");
}
} else if ("start-date".equals(localName)){
//there's another error condition that should be handled here if we encounter a start-date but we're already buffering
buf = new StringBuilder();
}
super.startElement(uri,localName,qName);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("start-date".equals(localName)) {
//buf will be int he format of YYYY OR YYYY/MM OR YYYY/MM/DD depending on what was in your XML.
doSomethingWith(buf.toString());
}
super.endElement(uri,localName,qName);
}
@Override
public void characters(char chars[], int start, int length)
throws SAXException {
if (buf != null) {
buf.append(chars, start, length);
}
super.characters(chars,start,length);
}
您可以添加限制,只允許合理的值(例如1-12爲月份,1-31爲日期,+整數爲年份),但您無法處理閏年或年禾/ 31天。 – duffymo
@PeterJaloveczki你到底在問什麼?通過「Java日期」你是指一個java.util.Date對象?如果month + day是可選的,那麼我不會看到你如何期望從一年內創建像j.u.Date這樣的日期時間對象。 –