Помогите с URL в качестве InputSource - PullRequest
0 голосов
/ 22 сентября 2011

Так что я задавал вопросы здесь, пытаясь получить ответ для себя, но я просто не могу заставить его работать, не сталкиваясь с новой ошибкой.Если кто-нибудь может мне помочь, я был бы признателен.Я хочу заменить эту часть

"<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>"

на URL-адрес XML, так как эта информация будет извлекаться с сервера при изменении данных.

Вот источник, который вы можете видеть, чтоЯ пытаюсь выполнить, как только у меня есть данные из файла XML.Он отлично работает, как есть, но всякий раз, когда я пытаюсь реализовать URL-адрес в качестве InputSource, я получаю тонны ошибок, которые, независимо от того, что я пробовал, не решают проблему.

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));

}
}

1 Ответ

1 голос
/ 22 сентября 2011

Возможно, вам нужно добавить разрешение ИНТЕРНЕТ в ваш файл AndroidManifest.xml (я предполагаю, что из импорта из Android это происходит на Android). Иначе я не понимаю, почему это не сработает. Я скопировал ваш XML на URL http://pastebin.com/raw.php?i=RF8cL5YZ, а затем запустил его для следующего кода в командной строке, и он отлично работал.

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)+"]");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...