【问题标题】:SAX startElement is never called从不调用 SAX startElement
【发布时间】:2017-08-14 19:44:15
【问题描述】:

我正在尝试使用 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 的其他主题中看到可能是导入,但我的导入对我来说似乎很好。

有什么想法吗?谢谢!

【问题讨论】:

  • 你确定 startElement 没有被调用吗?插入一个 sout 或设置一个断点。您的代码似乎是正确的。
  • @dr_debug 我很确定。我已经这样做了,没有任何反应!
  • 你能发布一个示例 xml 吗?我去看看
  • 我在帖子中添加了一个 xml 示例。

标签: java android xml sax


【解决方案1】:

您设置了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");
    }
}

证明您的代码有效

【讨论】:

  • 对不起,那是我的错。我的原始代码上面有一些葡萄牙语,我翻译的时候忘记改了,已经在帖子上更新了
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
相关资源
最近更新 更多