Java URL作为InputSource的帮助

Java URL作为InputSource的帮助,java,android,xpath,Java,Android,Xpath,因此,我一直在问问题,试图为自己找到答案,但我就是不能让它工作,而不遇到新的错误。如果有人能帮助我,我将不胜感激。我想换掉这一部分 "<a>\n" + "<b>\n" + "<c id=\"00001\" time=\"1:00\" day=\"Friday\" name1=\"John\" name2=\"Mary\"></c>\n" + "<c id=\"00002\" time=\"2:00\" day=\"Monday\" na

因此,我一直在问问题,试图为自己找到答案,但我就是不能让它工作,而不遇到新的错误。如果有人能帮助我,我将不胜感激。我想换掉这一部分

"<a>\n" + 
"<b>\n" + 
"<c id=\"00001\" time=\"1:00\" day=\"Friday\" name1=\"John\" name2=\"Mary\"></c>\n" + 
"<c id=\"00002\" time=\"2:00\" day=\"Monday\" name1=\"Ed\" name2=\"Kate\"></c>\n" + 
"<c id=\"00003\" time=\"3:00\" day=\"Sunday\" name1=\"Mary\" name2=\"Ed\"></c>\n" + 
"<c id=\"00004\" time=\"4:00\" day=\"Friday\" name1=\"Kate\" name2=\"John\"></c>\n" + 
"</b>\n" + 
"</a>"
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
""
而是使用XML url,因为随着数据的更改,这些信息将从服务器中提取

这里是源代码,您可以看到,一旦我从xml文件中获得了数据,我将尝试完成什么。虽然它工作得很好,但每当我尝试将url实现为输入源时,我都会遇到大量错误,无论我尝试了什么都无法解决问题

package com.newxpath;

import java.io.StringReader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;

public class NewxpathActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    InputSource xml = new InputSource(new StringReader("<a>\n" + 
            "<b>\n" + 
            "<c id=\"00001\" time=\"1:00\" day=\"Friday\" name1=\"John\" name2=\"Mary\"></c>\n" + 
            "<c id=\"00002\" time=\"2:00\" day=\"Monday\" name1=\"Ed\" name2=\"Kate\"></c>\n" + 
            "<c id=\"00003\" time=\"3:00\" day=\"Sunday\" name1=\"Mary\" name2=\"Ed\"></c>\n" + 
            "<c id=\"00004\" time=\"4:00\" day=\"Friday\" name1=\"Kate\" name2=\"John\"></c>\n" + 
            "</b>\n" + 
            "</a>"));

    String name = "Ed";

    XPath xpath = XPathFactory.newInstance().newXPath();
    String expr = String.format("//a/b/c[@name2='%s']", name);
    Node c = null;
    try {
        c = (Node) xpath.evaluate(expr, xml, XPathConstants.NODE);
    } catch (XPathExpressionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    NamedNodeMap attribs = c.getAttributes();
    String id = attribs.getNamedItem("id").getNodeValue();
    String time = attribs.getNamedItem("time").getNodeValue();
    // etc.

    EditText id2 = (EditText) findViewById(R.id.id2);
    EditText time2 = (EditText) findViewById(R.id.time2);

    id2.setText(String.valueOf(id));
    time2.setText(String.valueOf(time));

}
}
package com.newxpath;
导入java.io.StringReader;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpressionException;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.NamedNodeMap;
导入org.w3c.dom.Node;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.EditText;
公共类NewxpathActivity扩展了活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
InputSource xml=新的InputSource(新的StringReader(“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
""));
字符串name=“Ed”;
XPath=XPathFactory.newInstance().newXPath();
String expr=String.format(“//a/b/c[@name2='%s']”,name);
节点c=null;
试一试{
c=(Node)xpath.evaluate(expr、xml、XPathConstants.Node);
}捕获(XPathExpressionException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
NamedNodeMap attribs=c.getAttributes();
字符串id=attribs.getNamedItem(“id”).getNodeValue();
字符串时间=attribs.getNamedItem(“时间”).getNodeValue();
//等等。
EditText id2=(EditText)findViewById(R.id.id2);
EditText time2=(EditText)findViewById(R.id.time2);
id2.setText(String.valueOf(id));
time2.setText(String.valueOf(time));
}
}

您可能需要将INTERNET权限添加到您的AndroidManifest.xml文件中(根据Android导入,我假设这是在Android上进行的)。否则我不明白这为什么不起作用。我将您的XML复制到URL,然后在命令行中针对以下代码运行它,它运行得很好

import java.io.StringReader;

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

import org.xml.sax.InputSource;
import java.net.*;

public class test
{
    public static void main(String[] args) throws Exception
    {
    URL url = new URL("http://pastebin.com/raw.php?i=RF8cL5YZ");
    InputSource xml = new InputSource(url.openStream());
    String name = "Ed";

    XPath xpath = XPathFactory.newInstance().newXPath();
    String expr = String.format("//a/b/c[@name2='%s']", name);
    Node c = null;
    try {
        c = (Node) xpath.evaluate(expr, xml, XPathConstants.NODE);
    } catch (XPathExpressionException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    NamedNodeMap attribs = c.getAttributes();
    String id = attribs.getNamedItem("id").getNodeValue();
    String time = attribs.getNamedItem("time").getNodeValue();
    // etc.

    System.out.println("["+String.valueOf(id)+"]["+String.valueOf(time)+"]");
    }
}

感谢您的回复,由于某些原因,它仍然无法工作,只是在我尝试和测试它时强制关闭(强制关闭在我的android手机上),并且我添加了使用互联网的权限。我试图使用你的代码,看起来已经清理了很多,但也遇到了同样的问题。请查看android日志输出并粘贴其中生成的错误代码。没有任何错误被列为错误,但我发现了此警告09-22 00:23:30.435:WARN/ActivityManager(1618):HistoryRecord的活动空闲超时{4084da58 com.newxpath/.NewxpathActivity}严格来说,您可能无法识别异常跟踪,但如果强制关闭,则会出现异常。在命令行上运行
adb logcat
,然后运行应用程序,您应该会看到异常被抛出。D/AndroidRuntime(4963):关闭VM W/dalvikvm(4963):threadid=1:线程退出时出现未捕获异常(组=0x4001d5a0)E/AndroidRuntime(4963):致命异常:主E/AndroidRuntime(4963):java.lang.RuntimeException:无法实例化活动组件信息{com.newxpath/com.newxpath.NewxpathActivity}: