【发布时间】: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示例可能有用!