【问题标题】:Parsing XML with Android and Java使用 Android 和 Java 解析 XML
【发布时间】:2018-01-04 14:20:18
【问题描述】:

我必须解析这个 XML https://i.imgur.com/GUAHB4t.jpg 以提取“DetailPageURL”标签下突出显示的字符串。我试过了,但想法很混乱。我正在开发 Android SDK

import android.os.AsyncTask;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;


public class ReflinkFetcher extends AsyncTask<String, Void, String> {

String refLink = null;

@Override
protected String doInBackground( String... url){
    Document doc = openXML(url[0]);
    Element rootElement = doc.getDocumentElement();
    refLink = getString("DetailPageUrl", rootElement);
    return refLink;
}


public String getRefLink(){
    return refLink;
}

private Document openXML(String url) {
    Document doc = null;
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        doc = db.parse(new URL(url).openStream());
    } catch (SAXException e1) {
        e1.printStackTrace();
    } catch (ParserConfigurationException e1) {
        e1.printStackTrace();
    } catch (MalformedURLException e2) {
        e2.printStackTrace();
    } catch (IOException e3) {
        e3.printStackTrace();
    }
    return doc;
}

private String getString(String tagName, Element element) {
    NodeList list = element.getElementsByTagName("Items");
    if (list != null && list.getLength() > 0) {
        NodeList subList = list.item(0).getChildNodes(); //0=items
        if (subList != null && subList.getLength() > 0) {
            subList = subList.item(4).getChildNodes(); //4=item
            if( subList != null && subList.getLength() >0 ) {
                subList = subList.item(2).getChildNodes(); //2=DetailPageURL
                if( subList != null && subList.getLength() >0 ) {
                    return subList.item(0).getNodeValue(); // Value??
                }

            }
        }
    }
    return null;
}

}

正在执行最终的返回 null。我认为“getString”方法也很差。我该如何改进它?

【问题讨论】:

标签: java android xml


【解决方案1】:

查看这个不错的开源库,您只需要nice XML parser

【讨论】:

  • 这看起来是个好主意。但是,如果我有一个指向 XML 文件的远程 URL 怎么办?有没有比在 org.w3c.Document 中获取 xml 并将其转换为字符串以与您链接的解析器一起使用更好的想法?
猜你喜欢
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多