Ошибка в парсере - PullRequest
       16

Ошибка в парсере

0 голосов
/ 26 ноября 2010

Я хочу проанализировать этот xml и получить результат между тегами ... но я не могу получить результат, мой xml равен

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><loginResponse xmlns="https://comm1.get.com/"><loginResult>true</loginResult><result>success</result></loginResponse></soap:Body></soap:Envelope> Обработчик

public class MyXmlContentHandler extends DefaultHandler {
    String result;
    private String currentNode;
    private String currentValue = null;
    public String getFavicon() {
        return result;
    }
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {


        if (localName.equalsIgnoreCase("result")) {
            //offerList = new BFOfferList();
            this.result = new String();

        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {


        if (localName.equalsIgnoreCase("result")) {
            result = localName;

        } 
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {

         String value = new String(ch, start, length);

         if (currentNode.equals("result")){
            result = value;
            return;
         }


}



}

Любые необходимые изменения

1 Ответ

2 голосов
/ 26 ноября 2010

Когда вы нашли начальный тег, который вы ищете, «символы» вызываются один или несколько раз.Вы должны собирать данные, а не перезаписывать их.Измените

if (currentNode.equals("result")){
        result = value;
        return;
     }

на

if (currentNode.equals("result")){
        result += value;
        return;
     }

или используйте для этого StringBuilder.Кроме того, вы должны удалить это, кажется, перезаписать ваш результат String:

result = localName;

EDIT :

public class MyXmlContentHandler extends DefaultHandler {

private String result = "";
private String currentNode;

public String getFavicon() {
    return result;
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    currentNode = localName;
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
    currentNode = null;
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {

    String value = new String(ch, start, length);

    if ("result".equals(currentNode)){
        result += value;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...