パーサーが失敗したかどうかを確認できるデータ構造を使用します。 例:
public class XMLResponse {
private boolean hasFailed;
private Employee employee;
public void setFailure(boolean in) {
this.hasFailed=in;
}
public void setEmployee(Employee in) {
this.employee=in;
}
}
そして、応答が偽であるかどうかを確認してください。これは、成功した場合、Webサービスからの応答に応答タグが含まれていないという事実に基づいています。
ここではパーサーの例を示します。使用する前にいくつかの調整が必要な場合があります。あなたの回答に1人の従業員しかいない場合、それ以外の場合はリストを使用する必要があります。
public class XMLHandler extends DefaultHandler {
private XMLResponse myResponse;
private Employee employee;
public XMLResponse getParsedData() {
return this.myResponse;
}
@Override
public void startDocument() throws SAXException {
myResponse = new XMLResponse();
employee = new Employee();
}
@Override
public void startElement(String namespaceURI, String localName,
String qName, Attributes atts) throws SAXException {
buffer = new StringBuffer();
if(localName.equals("employee")) {
employee.setId(atts.getValue("id"));
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
if(localName.equals("response")) {
if(buffer.toString().contains("failure")) {
myResponse.setFailure(true);
}
}
else if(localName.equals("info")) {
/*
* This is only an example, could bee employee or whatever. You should use the startElement to get the tag.
*/
}
else if(localName.equals("name")) {
employee.setName(buffer.toString());
}
else if(localName.equals("age")) {
employee.setAge(buffer.toString());
}
else if(localName.equals("employee")) {
myResponse.setEmployee(employee);
}
}
/** Gets be called on the following structure:
* <tag>characters</tag> */
StringBuffer buffer;
@Override
public void characters(char ch[], int start, int length) {
buffer.append(ch,start,length);
}
なぜパーサーを1つだけ使用しますか?エラーパーサーがnullを返すようにするか、エラーについての何らかのフラグを返すようにしてください。 –
David Olsson私は単一パーサーを使用できます。しかし、私はどのように別の異なるXMLのための単一のパーサーを使用することができないのか分からない。いくつかの情報を提供してください。 –
私は、1つのパーサーを使用できるようにするための例を挙げて回答を掲載しました。 –