Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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中从xml中提取文本_Java_Android_Xml_Parsing_Sax - Fatal编程技术网

java中从xml中提取文本

java中从xml中提取文本,java,android,xml,parsing,sax,Java,Android,Xml,Parsing,Sax,我正在尝试为android创建一个rss阅读器。因此,我连接到一个rss ulr并获取一些XML信息。这是链接- 如果打开它查看源代码,您将注意到有一个标记content:encoded。如何获取此标签中的信息?我的代码跳过了它!我正在使用SAX。 这是我的解析器类: public class RSSParser extends DefaultHandler { private final static String TAG_ITEM = "item"; private fina

我正在尝试为android创建一个rss阅读器。因此,我连接到一个rss ulr并获取一些XML信息。这是链接- 如果打开它查看源代码,您将注意到有一个标记content:encoded。如何获取此标签中的信息?我的代码跳过了它!我正在使用SAX。 这是我的解析器类:

public class RSSParser extends DefaultHandler {
    private final static String TAG_ITEM = "item";
    private final static String[] xmltags = { "title", "link", "pubDate", "description", "content" };

    private RSSItem currentitem = null;
    private ArrayList<RSSItem> itemarray = null;
    private int currentindex = -1;
    private boolean isParsing = false;
    private StringBuilder builder = new StringBuilder();

    public RSSParser(ArrayList<RSSItem> itemarray) {
        super();

        this.itemarray = itemarray;
    }

    @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);

            if(isParsing && -1 != currentindex && null != builder)
            {
                builder.append(ch,start,length);
            }
        }

    @Override
        public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);

            if(localName.equalsIgnoreCase(TAG_ITEM))
            {
                currentitem = new RSSItem();
                currentindex = -1;
                isParsing = true;

                itemarray.add(currentitem);
            }
            else
            {
                currentindex = itemIndexFromString(localName);

                builder = null;

                if(-1 != currentindex)
                    builder = new StringBuilder();
            }
        }

    @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);

            if(localName.equalsIgnoreCase(TAG_ITEM))
            {
                isParsing = false;
            }
            else if(currentindex != -1)
            {
                if(isParsing)
                {
                    switch(currentindex)
                    {
                        case 0: currentitem.title = builder.toString();                 break;
                        case 1: currentitem.link = builder.toString();                  break;
                        case 2: currentitem.date = builder.toString();                  break;
                        case 3: currentitem.description= builder.toString();            break;
                        case 4: currentitem.content = builder.toString();               break;
                    }
                }
            }
        }

    private int itemIndexFromString(String tagname){
        int itemindex = -1;

        for(int index= 0; index<xmltags.length; ++index)
        {
            if(tagname.equalsIgnoreCase(xmltags[index]))
            {
                itemindex = index;

                break;
            }
        }

        return itemindex;
    }
}
public类RSSParser扩展了DefaultHandler{
私有最终静态字符串标记\u ITEM=“ITEM”;
私有最终静态字符串[]xmltags={“标题”、“链接”、“发布日期”、“描述”、“内容”};
私有RSSItem currentitem=null;
私有ArrayList itemarray=null;
private int currentindex=-1;
私有布尔值isParsing=false;
私有StringBuilder=新StringBuilder();
公共RSSParser(ArrayList itemarray){
超级();
this.itemarray=itemarray;
}
@凌驾
公共无效字符(char[]ch,int start,int length)引发异常{
超级字符(ch、开始、长度);
if(isParsing&&-1!=currentindex&&null!=builder)
{
builder.append(ch,start,length);
}
}
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、属性)引发SAXException{
startElement(uri、localName、qName、属性);
if(localName.equalsIgnoreCase(标记项))
{
currentitem=new RSSItem();
currentindex=-1;
isParsing=真;
itemarray.add(当前项);
}
其他的
{
currentindex=itemIndexFromString(localName);
builder=null;
如果(-1!=当前索引)
生成器=新的StringBuilder();
}
}
@凌驾
public void endElement(字符串uri、字符串localName、字符串qName)引发SAXException{
super.endElement(uri、localName、qName);
if(localName.equalsIgnoreCase(标记项))
{
isParsing=false;
}
else if(currentindex!=-1)
{
如果(isParsing)
{
开关(当前索引)
{
案例0:currentitem.title=builder.toString();中断;
案例1:currentitem.link=builder.toString();中断;
案例2:currentitem.date=builder.toString();中断;
案例3:currentitem.description=builder.toString();break;
案例4:currentitem.content=builder.toString();中断;
}
}
}
}
私有int-itemIndexFromString(字符串标记名){
int itemindex=-1;

对于(int index=0;index我真的建议不要在Android上使用
Sax
,因为据我记忆,它在Android上的性能非常慢。你应该使用
Android
附带的,所以不需要添加任何外部
jar
,而且你的性能也会有显著的提高。我刚刚测试了一个nd
XmlPullParser
会将
标记作为任何其他标记进行解析,因此它会工作。

看起来带有命名空间的标记被
忽略,如果
。请尝试在此处打印标记名

 private int itemIndexFromString(String tagname){
        int itemindex = -1;

        for(int index= 0; index<xmltags.length; ++index)
        {
            **PRINT (tagname)**
            if(tagname.equalsIgnoreCase(xmltags[index]))
            {
private int itemIndexFromString(字符串标记名){
int itemindex=-1;

对于(int index=0;indexy)您需要一个名称空间,我相信我尝试了这两个名称空间,结果是一样的。我就是无法找到这个标记:(标记值是多少?(您可能需要先打印它)