Android 如何解析<;媒体:缩略图>;来自rss提要xml的标记?

Android 如何解析<;媒体:缩略图>;来自rss提要xml的标记?,android,coding-style,rss,Android,Coding Style,Rss,我正在android上解析rss提要xml,能够检索所有其他内容,但未能检索提要中的图像 我正在使用sax解析器 图像嵌入在标记中。 看起来像这样 <media:thumbnail>http://www.*some_website*.com/..../Client000040008200000082068.jpg</media:thumbnail> http://www.*一些网站*.com/…/Client000040008200000082068.jpg 我见过很

我正在android上解析rss提要xml,能够检索所有其他内容,但未能检索提要中的图像

我正在使用sax解析器

图像嵌入在
标记中。 看起来像这样

<media:thumbnail>http://www.*some_website*.com/..../Client000040008200000082068.jpg</media:thumbnail>
http://www.*一些网站*.com/…/Client000040008200000082068.jpg
我见过很多例子,但它们是从嵌入的url链接解析的,也见过像这样嵌入的链接

 <media:thumbnail="link here"></media:thumbnail>

它们都一样吗? 如何解析这些标签

请帮我回答

多谢各位

编辑

这是我的rss处理程序

public void startDocument() throws SAXException {
    mFeed = new Feed();
}

public void endDocument() throws SAXException {
    Date now = new Date();
    //Date now = Calendar.getInstance().getTime();
    mFeed.setRefresh(now);
}

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    //Only consider elements from allowed third-party namespaces
    if (NAMESPACES.contains(uri)) {
        mSb = new StringBuffer();
        String value = localName.trim();

        if (value.equalsIgnoreCase("rss") ||  value.equalsIgnoreCase("rdf")) {
            isType = true;
        } else if (value.equalsIgnoreCase("feed")) {
            isType = true;
            isFeed = true;
        } else if (value.equalsIgnoreCase("channel")) {
            isFeed = true;
        } else if (value.equalsIgnoreCase("item") || value.equalsIgnoreCase("entry")) {
            mItem = new Item();
            isItem = true;
            mNbrItems++;
        } else if (value.equalsIgnoreCase("title"))
            isTitle = true;
        else if (value.equalsIgnoreCase("link")) {
            // Get attributes from link element for Atom format
            if (attributes != null) {
                // Enclosure for Atom format
                if (attributes.getValue("rel") != null && attributes.getValue("rel").equalsIgnoreCase("enclosure")) {
                    mEnclosure = new Enclosure();
                    mMimeAttribute = attributes.getValue("type");
                    isEnclosure = true;
                }
                mHrefAttribute = attributes.getValue("href");
            }
            isLink = true;
        } else if (value.equalsIgnoreCase("pubDate") || value.equalsIgnoreCase("published") || value.equalsIgnoreCase("date"))
            isPubdate = true;
        else if (value.equalsIgnoreCase("guid") || value.equalsIgnoreCase("id"))
            isGuid = true;
        else if (value.equalsIgnoreCase("description") || value.equalsIgnoreCase("summary"))
            isDescription = true;
        else if ((value.trim().equals("media:thumbnail"))) 
        {
        //  isImageLink = true;
            String attrValue = attributes.getValue("url");
            int tmp =Integer.parseInt(attrValue);
      //      tmp.setLink(attrValue);

            /*if (localName.trim().equals("thumbnail")) {          
                String thumbnail = attributes.getValue("url");            
            }*/
            }
        else if (value.equalsIgnoreCase("encoded") || value.equalsIgnoreCase("content"))
            isContent = true;
        else if (value.equalsIgnoreCase("source"))
            isSource = true;
        else if (value.equalsIgnoreCase("enclosure")) {
            // Enclosure for RSS format
            if (attributes != null) {
                mEnclosure = new Enclosure();
                mMimeAttribute = attributes.getValue("type");
                mHrefAttribute = attributes.getValue("url");
                isEnclosure = true;
            }
        }
    }
}

public void endElement(String uri, String localName, String qName) throws SAXException {
    //Only consider elements from allowed third-party namespaces
    if (NAMESPACES.contains(uri)) {
        String value = localName.trim();

        if (value.equalsIgnoreCase("rss")) {
            mFeed.setType(Feed.TYPE_RSS);
            isType = false;
        } else if (value.equalsIgnoreCase("feed")) {
            mFeed.setType(Feed.TYPE_ATOM);
            isType = false;
            isFeed = false;
        } else if (value.equalsIgnoreCase("RDF")) {
            mFeed.setType(Feed.TYPE_RDF);
            isType = false;
        } else if (value.equalsIgnoreCase("channel")) {
            isFeed = false;
        } else if (value.equalsIgnoreCase("item") || value.equalsIgnoreCase("entry")) {
            if (mNbrItems <= maxItems) {
                if (mItem.getGuid() == null)
                    mItem.setGuid(mItem.getLink().toString());
                mFeed.addItem(mItem);
            }
            isItem = false;
        } else if (value.equalsIgnoreCase("title") && !isSource) {
            if (isItem)
                mItem.setTitle(Html.fromHtml(mSb.toString().trim()).toString());
            else if (isFeed)
                mFeed.setTitle(Html.fromHtml(mSb.toString().trim()).toString());
            isTitle = false;
        } else if (value.equalsIgnoreCase("link") && !isSource) {
            if (isItem) {
                try {
                    if (isEnclosure) {
                        // Enclosure for Atom format
                        mEnclosure.setMime(mMimeAttribute);
                        mEnclosure.setURL(new URL(mHrefAttribute));
                        mItem.addEnclosure(mEnclosure);
                        mMimeAttribute = null;
                        isEnclosure = false;
                    } else if (mHrefAttribute != null)
                        mItem.setLink(new URL(mHrefAttribute));
                    else
                        mItem.setLink(new URL(mSb.toString().trim()));
                } catch(MalformedURLException mue) {
                    throw new SAXException(mue);
                }
            } else if (isFeed && mFeed.getHomePage() == null) {
                try {
                    if (mSb != null && mSb.toString() != "") // RSS
                        mFeed.setHomePage(new URL(mSb.toString().trim()));
                    else if (mMimeAttribute == "text/html") //Atom
                        mFeed.setHomePage(new URL(mHrefAttribute));
                } catch(MalformedURLException mue) {
                    throw new SAXException(mue);
                }
            }
            mHrefAttribute = null;
            isLink = false;
        } else if (value.equalsIgnoreCase("pubDate") || value.equalsIgnoreCase("published") || value.equalsIgnoreCase("date")) {
            if (isItem) {
                for (int i = 0; i < DATE_FORMATS.length; i++) {
                    try {
                        //String pattern = mSimpleDateFormats[i].toPattern();
                        mItem.setPubdate(mSimpleDateFormats[i].parse(mSb.toString().trim()));
                        break;
                    } catch (ParseException pe) {
                        if (i == DATE_FORMATS.length-1) {
                            throw new SAXException(pe);
                        }   
                    }
                }
            }
            isPubdate = false;
        } else if ((value.equalsIgnoreCase("guid") || value.equalsIgnoreCase("id")) && !isSource) {
            if (isItem)
                mItem.setGuid(mSb.toString().trim());
            isGuid = false;
        } else if (value.equalsIgnoreCase("description") || value.equalsIgnoreCase("summary")) {
            if (isItem)
                //mItem.setContent(Html.fromHtml(mSb.toString().trim()).toString());
                mItem.setContent(removeContentSpanObjects(mSb).toString().trim() + System.getProperty("line.separator" ));
            isDescription = false;

        } else if (value.equalsIgnoreCase("media:thumbnail") || value.equalsIgnoreCase("media:content")) {
                    if (isItem)
                        //mItem.setContent(Html.fromHtml(mSb.toString().trim()).toString());
                        System.out.println(removeContentSpanObjects(mSb).toString().trim());
                        mItem.setMimageLink(removeContentSpanObjects(mSb).toString().trim());
                        isImageLink = false;
        } else if (value.equalsIgnoreCase("encoded") || value.equalsIgnoreCase("content")) {
            if (isItem)
                //mItem.setContent(Html.fromHtml(mSb.toString().trim()).toString());
                mItem.setContent(removeContentSpanObjects(mSb).toString().trim() + System.getProperty("line.separator" ));
            isContent = false;
        } else if (value.equalsIgnoreCase("source"))
            isSource = false;
        else if (value.equalsIgnoreCase("enclosure")) {
            if (isItem) {
                try {
                    // Enclosure for RSS format
                    mEnclosure.setMime(mMimeAttribute);
                    mEnclosure.setURL(new URL(mHrefAttribute));
                    mItem.addEnclosure(mEnclosure);
                    mMimeAttribute = null;
                    mHrefAttribute = null;
                } catch(MalformedURLException mue) {
                    throw new SAXException(mue);
                }
            }
            isEnclosure = false;
        }
    }
}

public void characters(char[] ch, int start, int length) throws SAXException {
    if (isType || isTitle || isLink || isPubdate || isGuid || isDescription || isImageLink  || isContent)
        mSb.append(new String(ch, start, length));
}

public Feed handleFeed(URL url) throws IOException, SAXException, ParserConfigurationException {
    getParser().parse(new InputSource(url.openStream()));
    // Reordering the list of items, first item parsed (most recent) -> last item in the list
    Collections.reverse(mFeed.getItems());
    mFeed.setURL(url);
    if (mFeed.getHomePage() == null)
        mFeed.setHomePage(url);
    return mFeed;
}

private XMLReader getParser() throws SAXException, ParserConfigurationException {
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();
    XMLReader xr = sp.getXMLReader();
    xr.setContentHandler(this);
    return xr;
public void startDocument()引发异常{
mFeed=新的Feed();
}
public void endDocument()引发异常{
现在日期=新日期();
//现在日期=Calendar.getInstance().getTime();
mFeed.setRefresh(现在);
}
public void startElement(字符串uri、字符串localName、字符串qName、属性)引发SAXException{
/只考虑允许的第三方命名空间中的元素
if(NAMESPACES.contains(uri)){
mSb=新的StringBuffer();
字符串值=localName.trim();
if(value.equalsIgnoreCase(“rss”)| | value.equalsIgnoreCase(“rdf”)){
isType=true;
}else if(value.equalsIgnoreCase(“提要”)){
isType=true;
isFeed=true;
}else if(value.equalsIgnoreCase(“通道”)){
isFeed=true;
}else if(value.equalsIgnoreCase(“项目”)| | value.equalsIgnoreCase(“条目”)){
mItem=新项();
isItem=真;
mNbrItems++;
}else if(value.equalsIgnoreCase(“标题”))
isTitle=真;
else if(value.equalsIgnoreCase(“链接”)){
//从链接元素中获取Atom格式的属性
如果(属性!=null){
//Atom格式的封装
if(attributes.getValue(“rel”)!=null&&attributes.getValue(“rel”).equalsIgnoreCase(“附件”)){
mEnclosure=新外壳();
mmimeiAttribute=attributes.getValue(“类型”);
isEnclosure=true;
}
mHrefAttribute=attributes.getValue(“href”);
}
isLink=true;
}else if(value.equalsIgnoreCase(“publidate”)| value.equalsIgnoreCase(“published”)| value.equalsIgnoreCase(“date”))
isPubdate=true;
else if(value.equalsIgnoreCase(“guid”)| | value.equalsIgnoreCase(“id”))
isGuid=true;
else if(value.equalsIgnoreCase(“说明”)| | value.equalsIgnoreCase(“摘要”))
isDescription=true;
如果((value.trim().equals(“媒体:缩略图”))
{
//isImageLink=true;
字符串attrValue=attributes.getValue(“url”);
int tmp=Integer.parseInt(attrValue);
//tmp.setLink(属性值);
/*如果(localName.trim().equals(“缩略图”){
字符串缩略图=attributes.getValue(“url”);
}*/
}
else if(value.equalsIgnoreCase(“编码”)| | value.equalsIgnoreCase(“内容”))
isContent=true;
else if(value.equalsIgnoreCase(“源”))
isSource=true;
else if(value.equalsIgnoreCase(“附件”)){
//RSS格式的附件
如果(属性!=null){
mEnclosure=新外壳();
mmimeiAttribute=attributes.getValue(“类型”);
mHrefAttribute=attributes.getValue(“url”);
isEnclosure=true;
}
}
}
}
public void endElement(字符串uri、字符串localName、字符串qName)引发SAXException{
/只考虑允许的第三方命名空间中的元素
if(NAMESPACES.contains(uri)){
字符串值=localName.trim();
if(value.equalsIgnoreCase(“rss”)){
mFeed.setType(Feed.TYPE_RSS);
isType=false;
}else if(value.equalsIgnoreCase(“提要”)){
mFeed.setType(Feed.TYPE_ATOM);
isType=false;
isFeed=false;
}else if(value.equalsIgnoreCase(“RDF”)){
mFeed.setType(Feed.TYPE_RDF);
isType=false;
}else if(value.equalsIgnoreCase(“通道”)){
isFeed=false;
}else if(value.equalsIgnoreCase(“项目”)| | value.equalsIgnoreCase(“条目”)){
如果(n)是列表中的最后一项
Collections.reverse(mFeed.getItems());
设置url(url);
if(mFeed.getHomePage()==null)
设置主页(url);
返回mFeed;
}
私有XMLReader getParser()引发SAXException,ParserConfiguration异常{
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
xr.setContentHandler(此);
返回xr;

您需要使用qName

从:

localName—本地名称(不带前缀),如果未执行命名空间处理,则为空字符串

qName—限定名称(带前缀),如果限定名称不可用,则为空字符串


本地名称基本上去掉了名称空间,因此如果您愿意,也可以使用匹配的“缩略图”。

@PareshMayani我已使用代码进行了更新。我希望这一个有帮助。如果您希望更新更多代码,请告诉我。谢谢。