永远不会调用SAX startElement

时间:2017-03-22 15:24:11

标签: java android xml sax

我正在尝试使用SAX来解析XML,但实际上从未调用过Handler的startElement()。我没有任何线索,为什么它不起作用。

这是我的代码

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import java.io.InputStream;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class ChangePasswordXMLParser {
    public static void parseXML(InputStream xml) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            ChangePasswordHandler handler = new ChangePasswordHandler();
            saxParser.parse(xml, handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private static class ChangePasswordHandler extends DefaultHandler {
        boolean bfReturn;

        public ChangePasswordHandler() {

        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            if (qName.equalsIgnoreCase("return")) {
                bfReturn = true;
            }
        }

        @Override
        public void characters(char ch[], int start, int length) throws SAXException {
            if (bfReturn) {
                AuthenticateUserResult user = SessionManager.getInstance().getUser();
                String value = new String(ch, start, length);
                EventBus.getDefault().post(new AlterarSenhaEvent(value));
                bfReturn = false;
            }
        }
    }
}

这是和XML输入示例:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body SOAP-ENC:encodingStyle="http://schemas.xmlsoap.org/soap/envelope/">
    <NS1:ChangePasswordResponse xmlns:NS1="urn:exemple">
      <return xsi:type="xsd:string">03351-0</return>
    </NS1:ChangePasswordResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我确实在stackoverflow中的其他主题中看到可能是导入,但我的导入对我来说似乎很好。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您设置了AlterarSenhaHandler而不是PasswordHandler

所以永远不会调用PasswordHandler

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    if (qName.equalsIgnoreCase("return")) {
        System.out.println("inside return");
    }
}

证明您的代码有效