gpt4 book ai didi

Java:在另一个类中访问 XML 值作为新变量

转载 作者:行者123 更新时间:2023-12-01 12:52:35 25 4
gpt4 key购买 nike

Java 编程

我有一个 WeatherAgent 类。该类的功能是从在线世界天气的URL(XML代码)获取当前温度值和其他参数。

我的主要问题是;如何将WeatherAgent类中生成的温度值获取到另一个类(Boiler)中?因此,访问WeatherAgent类中的XML值作为另一个类(Boiler类)中的新变量。

package assignment_4;


/*
* imports of class WeatherAgent2
*/
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


/*
*start class WeatherAgent2
*/

public class WeatherAgent {

private Document getDocument() {

Document doc = null;

try {

URL url = new URL(
"http://api.worldweatheronline.com/free/v1/weather.ashx?q=Eindhoven&format=xml&num_of_days=5&key=87xdd77n893f6akfs6x3jk9s");

URLConnection connection = url.openConnection(); // Connecting to
// URL specified

doc = parseXML(connection.getInputStream());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return doc;

}

private Document parseXML(InputStream stream) throws Exception

{

DocumentBuilderFactory objDocumentBuilderFactory = null;

DocumentBuilder objDocumentBuilder = null;

Document doc = null;

try

{

objDocumentBuilderFactory = DocumentBuilderFactory.newInstance();

objDocumentBuilder = objDocumentBuilderFactory.newDocumentBuilder();

doc = objDocumentBuilder.parse(stream);
}

catch (Exception ex)

{

throw ex;

}

return doc;

}



/*
* get the temperature
*/
public double temperature() {

Document doc = getDocument();

Node Temperature;

Double temp = 0.0;

NodeList forecast = doc.getElementsByTagName("temp_C");

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

Element element = (Element) forecast.item(i);

NodeList list1 = (NodeList) element.getChildNodes();

Temperature = list1.item(0);

temp = Double.parseDouble(Temperature.getNodeValue());

}

return temp;

}

/*
* get cloud cover
*/
public double cloudcover() {

Document doc = getDocument();

Node Cloudcover;

Double cloudcover = 0.0;

NodeList forecast = doc.getElementsByTagName("cloudcover");

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

Element element = (Element) forecast.item(i);

NodeList list2 = (NodeList) element.getChildNodes();

Cloudcover = list2.item(0);

cloudcover = Double.parseDouble(Cloudcover.getNodeValue());

}

return cloudcover;

}





/*
* print method
*/
public static void main(String[] argvs) {

WeatherAgent wp = new WeatherAgent();

System.out.println("Temperature: " + wp.temperature());

System.out.println("Cloudcover: " + wp.cloudcover());

}

}

我在 Boiler 类中有这个方法,可以将 WeatherAgent 类的温度值获取到 Boiler 类中。它不起作用,我知道为什么。已经感谢您的帮助!

public double getValueFromAgent(){


double agentTemp = send(URL.create("http://api.worldweatheronline.com/free/v1/weather.ashx?q=Eindhoven&format=xml&num_of_days=5&key=87xdd77n893f6akfs6x3jk9s", "temperature" , null, Double.class));

return agentTemp;

}

最佳答案

有一些设计模式可以指导如何构建类来共享此类信息。我会研究观察者模式和中介者模式。

或者在main中,当你从WeatherAgent获得温度时,将其插入Boiler。有了所有这些,我们的想法就是将 Boiler 与对 WeatherAgent 的任何了解分离。它有助于提高可重用性,并使独立测试变得更加容易。

关于Java:在另一个类中访问 XML 值作为新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109871/

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