Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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 - Fatal编程技术网

Java 从网站解析xml

Java 从网站解析xml,java,android,xml-parsing,Java,Android,Xml Parsing,我有一个xml文件位于 我正在尝试解析这个xml文件,以便在我的程序中使用它,但每次程序强制关闭时,尽管没有错误。我是java新手,请帮助 下面是我在XMLParser.java中使用的代码 public class XMLParser { public String getXmlFromUrl(String url) { String xml = null; try { // defaultHttpClient DefaultHttpCl

我有一个xml文件位于

我正在尝试解析这个xml文件,以便在我的程序中使用它,但每次程序强制关闭时,尽管没有错误。我是java新手,请帮助

下面是我在XMLParser.java中使用的代码

public class XMLParser {


public String getXmlFromUrl(String url) {
    String xml = null;

    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // return XML
    return xml;
}
//Parsing XML content and getting DOM element
public Document getDomElement(String xml){
    Document doc = null;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {

        DocumentBuilder db = dbf.newDocumentBuilder();

        InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is); 

        } catch (ParserConfigurationException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (IOException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        }
            // return DOM
        return doc;
}

//Getting each xml child element value by passing element node name


public String getValue(Element item, String str) {
    NodeList n = ((Document) item).getElementsByTagName(str);
    return this.getElementValue(n.item(0));
} 
public final String getElementValue( Node elem ) {
         Node child;
         if( elem != null){
             if (elem.hasChildNodes()){
                 for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                     if( child.getNodeType() == Node.TEXT_NODE  ){
                         return child.getNodeValue();
                     }
                 }
             }
         }
         return "";
  } 

}
Channel.java的代码是

public class Channel extends ListActivity{

String selectedmode, channelName, channelLink;

Intent urlIntent;
    // All static variables

static final String DirectURL = "http://androtrends.hostingsiteforfree.com/direct.xml";

static final String FlashURL="http://androtrends.hostingsiteforfree.com/direct.xml";

// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_Channel = "channel";
static final String KEY_Link = "link";
String xml;
Toast toast;
ArrayList<HashMap<String, String>> menuItems;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.channels);
    selectedmode=getIntent().getExtras().getString("key");
    urlIntent=new Intent(Intent.ACTION_VIEW);
    Toast.makeText(this, "Wait 60 secs to load the stream...", Toast.LENGTH_LONG).show();
    updatechannels();

    ListView lv=getListView();
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // TODO Auto-generated method stub
            channelName= ((TextView) view.findViewById(R.id.channelName)).getText().toString();
            channelLink= ((TextView) view.findViewById(R.id.channelLink)).getText().toString();
            urlIntent.setData(Uri.parse(channelLink));
            toast.show();
            startActivity(urlIntent);
        }
    });
}

    private void updatechannels() {
    // TODO Auto-generated method stub
     menuItems = new ArrayList<HashMap<String, String>>();

    XMLParser parser = new XMLParser();
    if (selectedmode.equalsIgnoreCase("direct"))
    {
         xml = parser.getXmlFromUrl(DirectURL); // getting XML
    }else
    {
         xml = parser.getXmlFromUrl(FlashURL);
    }
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);
    // looping through all item nodes <item>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_Channel, parser.getValue(e, KEY_Channel));
        map.put(KEY_Link, parser.getValue(e, KEY_Link));


        // adding HashList to ArrayList
        menuItems.add(map);
    }

    // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(this, menuItems,
            R.layout.list_item,
            new String[] {  KEY_Channel, KEY_Link }, new int[] {
                    R.id.channelName, R.id.channelLink });

    setListAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}
公共类频道扩展ListActivity{
字符串selectedmode、channelName、channelLink;
意图或意图;
//所有静态变量
静态最终字符串DirectURL=”http://androtrends.hostingsiteforfree.com/direct.xml";
静态最终字符串FlashURL=”http://androtrends.hostingsiteforfree.com/direct.xml";
//XML节点密钥
静态最终字符串KEY\u ITEM=“ITEM”//父节点
静态最终字符串键\u Channel=“Channel”;
静态最终字符串键\u Link=“Link”;
字符串xml;
吐司;
ArrayList菜单项;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.channels);
selectedmode=getIntent().getExtras().getString(“键”);
urlIntent=新意图(Intent.ACTION\u视图);
Toast.makeText(这是“等待60秒以加载流…”),Toast.LENGTH_LONG.show();
更新通道();
ListView lv=getListView();
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
//TODO自动生成的方法存根
channelName=((TextView)view.findViewById(R.id.channelName)).getText().toString();
channelLink=((TextView)view.findviewbyd(R.id.channelLink)).getText().toString();
setData(Uri.parse(channelLink));
toast.show();
星触觉;
}
});
}
私有void updatechannels(){
//TODO自动生成的方法存根
menuItems=newarraylist();
XMLParser=新的XMLParser();
if(selectedmode.equalsIgnoreCase(“直接”))
{
xml=parser.getXmlFromUrl(DirectURL);//获取xml
}否则
{
xml=parser.getXmlFromUrl(FlashURL);
}
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(键项);
//循环通过所有项目节点
对于(int i=0;ivalue
put(KEY_Channel,parser.getValue(e,KEY_Channel));
put(KEY_-Link,parser.getValue(e,KEY_-Link));
//将哈希列表添加到ArrayList
menuItems.add(地图);
}
//向ListView添加菜单项
ListAdapter=new SimpleAdapter(此,菜单项,
R.layout.list_项目,
新字符串[]{KEY_Channel,KEY_Link},新int[]{
R.id.channelName,R.id.channelLink});
setListAdapter(适配器);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u主菜单);
返回true;
}
}
试试这个

    import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

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

import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class NetActivity extends Activity {

    String url = "http://androtrends.hostingsiteforfree.com/direct.xml";


    // Progress dialog
    ProgressDialog pDialog;

    ArrayList<String> title;
    ArrayList<String> description;  

    ItemAdapter adapter1;

    ListView list;

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_net);

        list = (ListView) findViewById(R.id.list);
        title = new ArrayList<String>();
        description = new ArrayList<String>();          

         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
             new XmlParsing(url).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
         else
             new XmlParsing(url).execute(new String[]{null});   

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

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

        // variables passed in:
        String urls;
        //  constructor
        public XmlParsing(String urls) {
            this.urls = urls;
        }

        @Override
        protected void onPreExecute() {
            pDialog = ProgressDialog.show(NetActivity.this, "Fetching Details..", "Please wait...", true);
        }


        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            URL url;
            try {

                url = new URL(urls);
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new InputSource(url.openStream()));

                doc.getDocumentElement().normalize();

                NodeList nodeList = doc.getElementsByTagName("item");

                for (int i = 0; i < nodeList.getLength(); i++) {

                    Node node = nodeList.item(i);       

                    Element fstElmnt = (Element) node;
                    NodeList nameList = fstElmnt.getElementsByTagName("channel");
                    Element nameElement = (Element) nameList.item(0);
                    nameList = nameElement.getChildNodes();
                    title.add(""+ ((Node) nameList.item(0)).getNodeValue());

                    System.out.println("channel : "+((Node) nameList.item(0)).getNodeValue());


                    Element fstElmnt1 = (Element) node;
                    NodeList nameList1 = fstElmnt1.getElementsByTagName("link");
                    Element nameElement1 = (Element) nameList1.item(0);
                    nameList1 = nameElement1.getChildNodes();
                    description.add(""+ ((Node) nameList1.item(0)).getNodeValue());

                    System.out.println("link : "+ ((Node) nameList1.item(0)).getNodeValue());           


                }

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // Now we have your JSONObject, play around with it.
            if (pDialog.isShowing())
                pDialog.dismiss();
            String value = result;

           // Log.v("URL  Res- - - -", ""+value);

            adapter1 = new ItemAdapter(this);
            list.setAdapter(adapter1);

        }

    }


class ItemAdapter extends BaseAdapter {

        final LayoutInflater mInflater;

        private class ViewHolder {
            public TextView title_text;
            public TextView des_text;
        }

        public ItemAdapter(XmlParsing xmlParsing) {
            // TODO Auto-generated constructor stub
            super();
            mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
        }

        //@Override
        public int getCount() {
            return title.size();
        }

        //@Override
        public Object getItem(int position) {
            return position;
        }

        //@Override
        public long getItemId(int position) {
            return position;
        }

        //@Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view = convertView;
            final ViewHolder holder;
            if (convertView == null) {
                view = mInflater.inflate(R.layout.mainpage_listitem_activity, parent, false);
                holder = new ViewHolder();
                holder.title_text = (TextView) view.findViewById(R.id.title_text);
                holder.des_text = (TextView) view.findViewById(R.id.des_text);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }

            holder.title_text.setText(""+title.get(position));      

            holder.des_text.setText(""+description.get(position));

        return view;
        }
    }
}
import java.io.IOException;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.InputSource;
导入org.xml.sax.SAXException;
导入android.os.AsyncTask;
导入android.os.Build;
导入android.os.Bundle;
导入android.annotation.TargetApi;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.Menu;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
公共类NetActivity扩展了活动{
字符串url=”http://androtrends.hostingsiteforfree.com/direct.xml";
//进度对话框
ProgressDialog;
ArrayList标题;
阵列列表描述;
项目适配器适配器1;
列表视图列表;
@TargetApi(构建版本代码蜂窝)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net);
list=(ListView)findViewById(R.id.list);
title=新的ArrayList();
description=新建ArrayList();
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB)
新的XmlParsing(url).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,新字符串[]{null});
其他的
新建XmlParsing(url).execute(新字符串[]{null});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共类XmlParsing扩展了异步任务{
//传入的变量:
字符串URL;
//建造师
公共XML解析(字符串URL){
this.url=url;
}
@凌驾
受保护的void onPreExecute(){
pDialog=ProgressDialog.show(NetActivity.this,“正在获取详细信息…”,“请稍候…”,true);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
网址;
试一试{
url=新url(url);
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(新的输入源(url.openStream());
doc.getDocumentElement().normalize();