Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SAXParser从XML检索HTML编码的文本_Java_Android_Xml_Rss_Saxparser - Fatal编程技术网

Java 使用SAXParser从XML检索HTML编码的文本

Java 使用SAXParser从XML检索HTML编码的文本,java,android,xml,rss,saxparser,Java,Android,Xml,Rss,Saxparser,这是我第一次使用SAXParser(我在Android中使用它,但我不认为这对这个特定问题有什么影响),我正在尝试从RSS提要读取数据。到目前为止,它在很大程度上对我来说工作得很好,但当它到达包含HTML编码文本的标记时,我遇到了麻烦(例如a href=”http://...)。字符()方法只将作为读取。如果它对任何人都有帮助,我可以通过对我感兴趣的数据的每个字段使用布尔值来解决这个问题。然后我只是继续附加到StringBuilder,直到到达结束标记,然后我获取StringBuilder值,然

这是我第一次使用SAXParser(我在Android中使用它,但我不认为这对这个特定问题有什么影响),我正在尝试从RSS提要读取数据。到目前为止,它在很大程度上对我来说工作得很好,但当它到达包含HTML编码文本的标记时,我遇到了麻烦(例如
a href=”http://...
)。字符()
方法只将
作为
读取。如果它对任何人都有帮助,我可以通过对我感兴趣的数据的每个字段使用布尔值来解决这个问题。然后我只是继续附加到StringBuilder,直到到达结束标记,然后我获取StringBuilder值,然后清空它,并设置boolean为假

@Override
    public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
        sb.delete(0, sb.length());
        if (localName.equalsIgnoreCase("channel")) {
            inChannel = true;
            newFeed = new Feed();
            itemList = new ArrayList<Item>();
        }
        if (inChannel) {            
            if (localName.equalsIgnoreCase("image")) {
                feedImage = new Image();
                inImage = true;
                return;
            }           
            else if (localName.equalsIgnoreCase("item")) {
                newItem = new Item();
                inItem = true;
                return;
            }

            if(inImage) { //set booleans for image elements
                if (localName.equalsIgnoreCase("title")) imgTitle = true;
                else if (localName.equalsIgnoreCase("link")) imgLink = true;
                else if (localName.equalsIgnoreCase("url")) imgURL = true;
                return;
            }           
            else if(inItem) { //set booleans for item elements
                if (localName.equalsIgnoreCase("title")) iTitle = true;
                else if (localName.equalsIgnoreCase("link")) iLink = true;
                else if (localName.equalsIgnoreCase("description")) iDescription = true;
                else if (localName.equalsIgnoreCase("author")) iAuthor = true;
                else if (localName.equalsIgnoreCase("category")) iCategory = true;
                else if (localName.equalsIgnoreCase("comments")) iComments = true;
                else if (localName.equalsIgnoreCase("guid")) iGuid = true;
                else if (localName.equalsIgnoreCase("pubdate")) iPubDate= true;
                else if (localName.equalsIgnoreCase("source")) iSource = true;
                return;
            } else { //set booleans for channel elements
                if (localName.equalsIgnoreCase("title")) fTitle = true;
                else if (localName.equalsIgnoreCase("link")) fLink = true;
                else if (localName.equalsIgnoreCase("description")) fDescription = true;
                else if (localName.equalsIgnoreCase("language")) fLanguage= true;
                else if (localName.equalsIgnoreCase("copyright")) fCopyright = true;
                else if (localName.equalsIgnoreCase("category")) fCategory = true;
                return;
            }
        }       
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if(inChannel) {
            if(inImage) {
                if (localName.equalsIgnoreCase("title")) {
                    feedImage.setTitle(sb.toString());
                    sb.delete(0, sb.length());
                    imgTitle = false;
                    return;
                }
                else if (localName.equalsIgnoreCase("link")) {
                    feedImage.setLink(sb.toString());
                    sb.delete(0, sb.length());
                    imgLink = false;
                    return;
                }
                else if (localName.equalsIgnoreCase("url")) {
                    feedImage.setUrl(sb.toString());
                    sb.delete(0, sb.length());
                    imgURL = false;
                    return;
                }
                else return;
            } 
            else if(inItem) {
                if (localName.equalsIgnoreCase("item")) {
                    itemList.add(newItem);
                    newItem = null;
                    inItem = false;
                    return;
                } else if (localName.equalsIgnoreCase("title")) {
                    newItem.setTitle(sb.toString()); 
                    sb.delete(0, sb.length());
                    iTitle = false;
                    return;
                } else if (localName.equalsIgnoreCase("link")) {
                    newItem.setLink(sb.toString()); 
                    sb.delete(0, sb.length());
                    iLink = false;
                    return;
                } else if (localName.equalsIgnoreCase("description")) {
                    newItem.setDescription(sb.toString()); 
                    sb.delete(0, sb.length());
                    iDescription = false;
                    return;
                } else if (localName.equalsIgnoreCase("author")) {
                    newItem.setAuthor(sb.toString()); 
                    sb.delete(0, sb.length());
                    iAuthor = false;
                    return;
                } else if (localName.equalsIgnoreCase("category")) {
                    newItem.addCategory(sb.toString()); 
                    sb.delete(0, sb.length());
                    iCategory = false;
                    return;
                } else if (localName.equalsIgnoreCase("comments")) {
                    newItem.setComments(sb.toString());
                    sb.delete(0, sb.length());
                    iComments = false;
                    return;
                } /*else if (localName.equalsIgnoreCase("enclosure")) {
                     To be implemented later
                }*/ else if (localName.equalsIgnoreCase("guid")) {
                    newItem.setGuid(sb.toString()); 
                    sb.delete(0, sb.length());
                    iGuid = false;
                    return;
                } else if (localName.equalsIgnoreCase("pubDate")) {
                    newItem.setPubDate(sb.toString()); 
                    sb.delete(0, sb.length());
                    iPubDate = false;
                    return;
                }
            } 
            else {
                if(localName.equalsIgnoreCase("channel")) {
                    newFeed.setItems((ArrayList<Item>)itemList);
                    finalFeed = newFeed;
                    newFeed = null;                     
                    inChannel = false;
                    return;
                } else if(localName.equalsIgnoreCase("title")) {
                    newFeed.setTitle(currentValue); 
                    sb.delete(0, sb.length());
                    fTitle = false;
                    return;
                } else if(localName.equalsIgnoreCase("link")) {
                    newFeed.setLink(currentValue); 
                    sb.delete(0, sb.length());
                    fLink = false;
                    return;
                } else if(localName.equalsIgnoreCase("description")) {
                    newFeed.setDescription(sb.toString());
                    sb.delete(0, sb.length());
                    fDescription = false;
                    return;
                } else if(localName.equalsIgnoreCase("language")) {
                    newFeed.setLanguage(currentValue); 
                    sb.delete(0, sb.length());
                    fLanguage = false;
                    return;
                } else if(localName.equalsIgnoreCase("copyright")) {
                    newFeed.setCopyright(currentValue); 
                    sb.delete(0, sb.length());
                    fCopyright = false;
                    return;
                } else if(localName.equalsIgnoreCase("category")) {
                    newFeed.addCategory(currentValue); 
                    sb.delete(0, sb.length());
                    fCategory = false;
                    return;
                }
            }
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) {
        sb.append(new String(ch, start, length));
    }
@覆盖
public void startElement(字符串uri、字符串localName、字符串qName、属性attrs)引发SAXException{
sb.删除(0,sb.length());
if(localName.equalsIgnoreCase(“通道”)){
inChannel=true;
newFeed=newFeed();
itemList=新的ArrayList();
}
如果(在通道中){
if(localName.equalsIgnoreCase(“图像”)){
feedImage=新图像();
inImage=真;
返回;
}           
else if(localName.equalsIgnoreCase(“项”)){
newItem=新项();
inItem=true;
返回;
}
if(inImage){//为图像元素设置布尔值
if(localName.equalsIgnoreCase(“title”))imgTitle=true;
else如果(localName.equalsIgnoreCase(“link”))imgLink=true;
else if(localName.equalsIgnoreCase(“url”))imgURL=true;
返回;
}           
else if(inItem){//为item元素设置布尔值
如果(localName.equalsIgnoreCase(“title”))iTitle=true;
else如果(localName.equalsIgnoreCase(“link”))iLink=true;
else if(localName.equalsIgnoreCase(“description”))ideDescription=true;
else if(localName.equalsIgnoreCase(“作者”))iauther=true;
else如果(localName.equalsIgnoreCase(“类别”))iCategory=true;
else if(localName.equalsIgnoreCase(“comments”))iComments=true;
else如果(localName.equalsIgnoreCase(“guid”))iGuid=true;
else如果(localName.equalsIgnoreCase(“pubdate”))iPubDate=true;
else如果(localName.equalsIgnoreCase(“源”))iSource=true;
返回;
}else{//为通道元素设置布尔值
如果(localName.equalsIgnoreCase(“title”))fTitle=true;
else如果(localName.equalsIgnoreCase(“link”))fLink=true;
else如果(localName.equalsIgnoreCase(“description”))fddescription=true;
else如果(localName.equalsIgnoreCase(“语言”))fLanguage=true;
否则如果(localName.equalsIgnoreCase(“版权”))fCopyright=true;
else如果(localName.equalsIgnoreCase(“类别”))fCategory=true;
返回;
}
}       
}
@凌驾
public void endElement(字符串uri、字符串localName、字符串qName)引发SAXException{
如果(在通道中){
如果(在图像中){
if(localName.equalsIgnoreCase(“标题”)){
setTitle(sb.toString());
sb.删除(0,sb.length());
imgTitle=false;
返回;
}
else if(localName.equalsIgnoreCase(“链接”)){
setLink(sb.toString());
sb.删除(0,sb.length());
imgLink=false;
返回;
}
else if(localName.equalsIgnoreCase(“url”)){
setUrl(sb.toString());
sb.删除(0,sb.length());
imgURL=假;
返回;
}
否则返回;
} 
else if(inItem){
if(localName.equalsIgnoreCase(“项”)){
itemList.add(newItem);
newItem=null;
inItem=false;
返回;
}else if(localName.equalsIgnoreCase(“title”)){
newItem.setTitle(sb.toString());
sb.删除(0,sb.length());
iTitle=假;
返回;
}else if(localName.equalsIgnoreCase(“链接”)){
setLink(sb.toString());
sb.删除(0,sb.length());
iLink=假;
返回;
}else if(localName.equalsIgnoreCase(“说明”)){
setDescription(sb.toString());
sb.删除(0,sb.length());
iDescription=false;
返回;
}else if(localName.equalsIgnoreCase(“作者”)){
setAuthor(sb.toString());
sb.删除(0,sb.length());
作者=假;
返回;
}else if(localName.equalsIgnoreCase(“类别”)){
newItem.addCategory(sb.toString());
sb.删除(0,sb.length());
iCategory=假;
返回;
}else if(localName.equalsIgnoreCase(“注释”)){
setComments(sb.toString());
sb.删除(0,sb.length());
iComments=false;
返回;
}/*else if(localName.equalsIgnoreCase(“附件”)){
待以后实施
}*/else if(localName.equal)
@Override
    public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
        sb.delete(0, sb.length());
        if (localName.equalsIgnoreCase("channel")) {
            inChannel = true;
            newFeed = new Feed();
            itemList = new ArrayList<Item>();
        }
        if (inChannel) {            
            if (localName.equalsIgnoreCase("image")) {
                feedImage = new Image();
                inImage = true;
                return;
            }           
            else if (localName.equalsIgnoreCase("item")) {
                newItem = new Item();
                inItem = true;
                return;
            }

            if(inImage) { //set booleans for image elements
                if (localName.equalsIgnoreCase("title")) imgTitle = true;
                else if (localName.equalsIgnoreCase("link")) imgLink = true;
                else if (localName.equalsIgnoreCase("url")) imgURL = true;
                return;
            }           
            else if(inItem) { //set booleans for item elements
                if (localName.equalsIgnoreCase("title")) iTitle = true;
                else if (localName.equalsIgnoreCase("link")) iLink = true;
                else if (localName.equalsIgnoreCase("description")) iDescription = true;
                else if (localName.equalsIgnoreCase("author")) iAuthor = true;
                else if (localName.equalsIgnoreCase("category")) iCategory = true;
                else if (localName.equalsIgnoreCase("comments")) iComments = true;
                else if (localName.equalsIgnoreCase("guid")) iGuid = true;
                else if (localName.equalsIgnoreCase("pubdate")) iPubDate= true;
                else if (localName.equalsIgnoreCase("source")) iSource = true;
                return;
            } else { //set booleans for channel elements
                if (localName.equalsIgnoreCase("title")) fTitle = true;
                else if (localName.equalsIgnoreCase("link")) fLink = true;
                else if (localName.equalsIgnoreCase("description")) fDescription = true;
                else if (localName.equalsIgnoreCase("language")) fLanguage= true;
                else if (localName.equalsIgnoreCase("copyright")) fCopyright = true;
                else if (localName.equalsIgnoreCase("category")) fCategory = true;
                return;
            }
        }       
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if(inChannel) {
            if(inImage) {
                if (localName.equalsIgnoreCase("title")) {
                    feedImage.setTitle(sb.toString());
                    sb.delete(0, sb.length());
                    imgTitle = false;
                    return;
                }
                else if (localName.equalsIgnoreCase("link")) {
                    feedImage.setLink(sb.toString());
                    sb.delete(0, sb.length());
                    imgLink = false;
                    return;
                }
                else if (localName.equalsIgnoreCase("url")) {
                    feedImage.setUrl(sb.toString());
                    sb.delete(0, sb.length());
                    imgURL = false;
                    return;
                }
                else return;
            } 
            else if(inItem) {
                if (localName.equalsIgnoreCase("item")) {
                    itemList.add(newItem);
                    newItem = null;
                    inItem = false;
                    return;
                } else if (localName.equalsIgnoreCase("title")) {
                    newItem.setTitle(sb.toString()); 
                    sb.delete(0, sb.length());
                    iTitle = false;
                    return;
                } else if (localName.equalsIgnoreCase("link")) {
                    newItem.setLink(sb.toString()); 
                    sb.delete(0, sb.length());
                    iLink = false;
                    return;
                } else if (localName.equalsIgnoreCase("description")) {
                    newItem.setDescription(sb.toString()); 
                    sb.delete(0, sb.length());
                    iDescription = false;
                    return;
                } else if (localName.equalsIgnoreCase("author")) {
                    newItem.setAuthor(sb.toString()); 
                    sb.delete(0, sb.length());
                    iAuthor = false;
                    return;
                } else if (localName.equalsIgnoreCase("category")) {
                    newItem.addCategory(sb.toString()); 
                    sb.delete(0, sb.length());
                    iCategory = false;
                    return;
                } else if (localName.equalsIgnoreCase("comments")) {
                    newItem.setComments(sb.toString());
                    sb.delete(0, sb.length());
                    iComments = false;
                    return;
                } /*else if (localName.equalsIgnoreCase("enclosure")) {
                     To be implemented later
                }*/ else if (localName.equalsIgnoreCase("guid")) {
                    newItem.setGuid(sb.toString()); 
                    sb.delete(0, sb.length());
                    iGuid = false;
                    return;
                } else if (localName.equalsIgnoreCase("pubDate")) {
                    newItem.setPubDate(sb.toString()); 
                    sb.delete(0, sb.length());
                    iPubDate = false;
                    return;
                }
            } 
            else {
                if(localName.equalsIgnoreCase("channel")) {
                    newFeed.setItems((ArrayList<Item>)itemList);
                    finalFeed = newFeed;
                    newFeed = null;                     
                    inChannel = false;
                    return;
                } else if(localName.equalsIgnoreCase("title")) {
                    newFeed.setTitle(currentValue); 
                    sb.delete(0, sb.length());
                    fTitle = false;
                    return;
                } else if(localName.equalsIgnoreCase("link")) {
                    newFeed.setLink(currentValue); 
                    sb.delete(0, sb.length());
                    fLink = false;
                    return;
                } else if(localName.equalsIgnoreCase("description")) {
                    newFeed.setDescription(sb.toString());
                    sb.delete(0, sb.length());
                    fDescription = false;
                    return;
                } else if(localName.equalsIgnoreCase("language")) {
                    newFeed.setLanguage(currentValue); 
                    sb.delete(0, sb.length());
                    fLanguage = false;
                    return;
                } else if(localName.equalsIgnoreCase("copyright")) {
                    newFeed.setCopyright(currentValue); 
                    sb.delete(0, sb.length());
                    fCopyright = false;
                    return;
                } else if(localName.equalsIgnoreCase("category")) {
                    newFeed.addCategory(currentValue); 
                    sb.delete(0, sb.length());
                    fCategory = false;
                    return;
                }
            }
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) {
        sb.append(new String(ch, start, length));
    }
tempSB = tempSB.append(new String(ch, start, length));
tempSB.delete(0, tempSB.length());
tempText.setText(tempSB.toString()) ;