gpt4 book ai didi

java - 从 url 获取 xml 不起作用

转载 作者:行者123 更新时间:2023-12-02 05:57:40 26 4
gpt4 key购买 nike

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

// XML node names
static final String NODE_EVEN = "event";
static final String NODE_NAME = "name";
static final String NODE_DATE = "date";
static final String NODE_LOC = "location";

private TextView txtView;



public GetXMLTask(TextView txtView) {
this.txtView = txtView;

}

@Override
protected String doInBackground(String... urls) {
String xml = null;
for (String url : urls) {
xml = getXmlFromUrl(url);

}
return xml;
}

@Override
protected void onPostExecute(String xml) {

XMLDOMParser parser = new XMLDOMParser();
InputStream stream = new ByteArrayInputStream(xml.getBytes());
Document doc = parser.getDocument(stream);

NodeList nodeList = doc.getElementsByTagName(NODE_EVEN);

ArrayList<Event>events = new ArrayList<Event>();

Event event = new Event();
for (int i = 0; i < nodeList.getLength(); i++) {
// event = new Event();
Element e = (Element) nodeList.item(i);

//will use for something later on
event.setName(parser.getValue(e, NODE_NAME));
//event.setName(parser.getValue(e, NODE_DATE));
event.setName(parser.getValue(e, NODE_LOC));
events.add(event);
}
txtView.setText(doc.toString()); // to test xml!

}

/* uses HttpURLConnection to make Http request from Android to download
the XML file */
private String getXmlFromUrl(String urlString) {
StringBuffer output = new StringBuffer("");

InputStream stream = null;
URL url;
try {
url = new URL(urlString);
URLConnection connection = url.openConnection();

HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setRequestMethod("GET");
httpConnection.connect();

if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
stream = httpConnection.getInputStream();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(stream));
String s = "";
while ((s = buffer.readLine()) != null)
output.append(s);
}
} catch (MalformedURLException e) {
Log.e("Error", "Unable to parse URL", e);
} catch (IOException e) {
Log.e("Error", "IO Exception", e);
}

return output.toString();


}


}

完成并不需要那么长时间,因此考虑到模拟器的速度有多慢,getxmlfromurl 一定出了问题,对吧?我在 TextView 中得到输出

org.apache.harmony.xml.dom.DocumentImpl@b3d5c4b0

在调用 getXMLFromUrl 之前,我的 url 没问题,并进行了测试。

最佳答案

没有任何问题。您已成功解析 XML 文档,并且在 doc 变量中获得了对该文档的引用。

所有错误在于您期望 Document.toString() 会给您返回一些有意义的东西。看起来它没有被覆盖,这就是您得到该字符串的原因。如果您想再次获取 XML 文本,则需要使用转换器 IIRC。

但是,您的 getXmlFromUrl 方法已损坏 - 它正在删除换行符,这意味着如果您有以下 XML:

<foo>line 1
line 2</foo>

最终会得到一条内容“line 1line2”,这是不正确的。此外,您不应在未指定编码的情况下调用 String.getBytes()。 (与没有编码的 InputStreamReader 相同。)基本上,不清楚为什么不直接从 HttpURLConnection 的输入 strema 解析 XML...代码量要少得多,并且可以避免您当前代码中出现的各种错误。

关于java - 从 url 获取 xml 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22947665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com