【问题标题】:Error in parser解析器中的错误
【发布时间】:2010-11-26 08:58:46
【问题描述】:

我想解析这个 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;
         }


}



}

需要的任何更改

【问题讨论】:

  • 您的标签可能有误。 nsxmlparser 不是 iPhone 类吗?我会为此推荐“sax”和“xmlparser”。
  • @Tim 它的 xmlparser sry... 标签是正确的..

标签: android xml-parsing


【解决方案1】:

当您找到要查找的开始标签时,“字符”会被调用一次或多次。您必须收集数据而不是覆盖它。改变

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

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

或者使用 StringBuilder 来做。此外,您应该删除它,它似乎会覆盖您的结果字符串:

result = localName;

编辑

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;
    }
}
}

【讨论】:

  • 您在 logcat 中遇到的异常或错误如何?人们总是发布代码或问题,但经常忘记添加例外。但是异常为代码出了什么问题提供了重要的提示。例如,我没有看到currentNode 在任何地方填充,而您将其初始化为null。所以这可能是你的问题,因为如果对象没有初始化,你就不能调用 equals(阅读:null
  • 我添加了一个更正的示例。我认为@Tseng 是对的,您从未设置“currentNode”并且可能会得到 NullPointerException。我翻转了 if ("result".equals(currentNode)) 以防止这种情况,在调用 start 和 entElement 时设置和取消设置 currentNode 并在每次调用字符时将值添加到结果字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多