【问题标题】:Android - Trouble parsing enclosure tag in XMLAndroid - 无法解析 XML 中的附件标签
【发布时间】:2016-08-16 17:28:41
【问题描述】:

我正在使用以下代码来解析 XML 文件。一切正常,除非我尝试从附件标签中读取 url 属性。我读过的所有内容都显示使用 attributes.getValue("url") 但我似乎仍然得到一个空值。也许我没有正确返回它?

我试图解析的特定行是这样的:

这是我尝试使用按钮播放 mp3 时在 LogCat 中看到的唯一信息。 I/StagefrightPlayer(33):setDataSource('') E/MediaPlayer(275):在状态 4 中开始调用 E/MediaPlayer(275): 错误 (-38, 0) E/MediaPlayer(275):错误(-38,0)

我认为导致问题的行在底部: 否则如果(localName.equalsIgnoreCase(ENC)){ 字符串链接 = attributes.getValue("url"); currentMessage.setEnc(link);

谢谢。

package com.Demo;

import java.util.ArrayList;
import java.util.List;

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

import android.util.Log;
import static com.Demo.BaseFeedParser.*;

public class RssHandler extends DefaultHandler{
    private List<Message> messages;
    private Message currentMessage;
    private StringBuilder builder;


    public List<Message> getMessages(){
        return this.messages;
    }
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        super.characters(ch, start, length);
        builder.append(ch, start, length);
    }

    @Override
    public void endElement(String uri, String localName, String name)
            throws SAXException {
        super.endElement(uri, localName, name);
        if (this.currentMessage != null){
            if (localName.equalsIgnoreCase(TITLE)){
                currentMessage.setTitle(builder.toString());
            } else if (localName.equalsIgnoreCase(LINK)){
                currentMessage.setLink(builder.toString());
            } else if (localName.equalsIgnoreCase(DESCRIPTION)){
                currentMessage.setDescription(builder.toString());
            } else if (localName.equalsIgnoreCase(PUB_DATE)){
                currentMessage.setDate(builder.toString());
            } else if (localName.equalsIgnoreCase(SUMMARY)) {
                currentMessage.setSummary(builder.toString());
            } else if (localName.equalsIgnoreCase(ITEM)){
                messages.add(currentMessage);
            builder.setLength(0);   
        }
        }
    }

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        messages = new ArrayList<Message>();
        builder = new StringBuilder();
    }

    @Override
    public void startElement(String uri, String localName, String name,
            Attributes attributes) throws SAXException {
        super.startElement(uri, localName, name, attributes);
        if (localName.equalsIgnoreCase(ITEM)){
            this.currentMessage = new Message();
        }
        else if (localName.equalsIgnoreCase(ENC)) {
            String link = attributes.getValue("url");
            currentMessage.setEnc(link);
        }
    }
}

【问题讨论】:

  • 正如我们每天在这里所说的数百次,将包含错误的完整堆栈发布您的日志猫。指向导致错误的行,最后看到:sscce.org 我们要创建一个新项目来为调试所有这些。感谢您的理解。
  • 一个要解析的xml示例可能有用!

标签: android xml


【解决方案1】:

这个电话

       String link = attributes.getValue("url");

需要参数是 XML 限定(前缀)名称,并且“url”可能只是本地名称。

要对此进行调试,您可以使用getLength() 查看所有属性以找出有多少,然后使用getLocalName(int index)getQName(int index) 显示名称的不同形式。

【讨论】:

    【解决方案2】:

    我找到了 XmlPullParser 的答案

    if (tagName.equalsIgnoreCase("enclosure")) { 
    String imgUrl = parser.getAttributeValue(null, "url");
    article.setImageUrl(imgUrl);
    

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 2017-05-06
      • 1970-01-01
      相关资源
      最近更新 更多