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

标签 java xml agents

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/

相关文章:

java - Flutter:插件需要 Android SDK 版本 31 但它设置为 31?

java - 为什么这个算法在追踪时没有意义?

Java:抛出异常后程序不会崩溃

java - 如何在 servlet 上下文中从 jar 文件读取 xml 模式

添加 xhtml 时浏览器中的 xml 格式

java - 无法从 Java 代理访问文件系统

java - log4j2 JDBC Appender 问题 :Failed to Insert Record

java - 编写可使用 Set 属性转换为 Java 的 xml 模式

java - 使用 JCIFS 的 Domino Java 代理 - 清理代理线程时出错