Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析自定义xml配置文件_Java_Xml_Configuration_Apache Commons Config - Fatal编程技术网

Java 解析自定义xml配置文件

Java 解析自定义xml配置文件,java,xml,configuration,apache-commons-config,Java,Xml,Configuration,Apache Commons Config,我的目标是Java1.5 我有另一个软件供应商提供的自定义配置文件,我需要读取它 <?xml version="1.0" encoding="ISO-8859-1"?> <environments> <environment key="DEFAULT" description="Default"> <variable name="LOGGER_NAME" value="LCI"/> <variable

我的目标是Java1.5 我有另一个软件供应商提供的自定义配置文件,我需要读取它

<?xml version="1.0" encoding="ISO-8859-1"?>
<environments>
    <environment key="DEFAULT" description="Default">
        <variable name="LOGGER_NAME" value="LCI"/>
        <variable name="MAIL_SERVER" value="127.0.0.1"/>
            ......
    </environment>
    <environment key="TEST" description="Test">
        <variable name="LOGGER_NAME" value="LCO"/>
        <variable name="MAIL_SERVER" value="192.168.2.15"/>
            ......
    </environment>
</environments>

......
......
我需要把它放在一个散列图中,然后像其他人一样访问它

getProperty(“默认”、“记录器名称”)

我想我可以在HashMap中加载信息,在这里我可以使用像DEFAULT.LOGGER\u NAME这样的g键进行访问


我可以使用APACHE COMMONS配置(如何配置?),还是太复杂,最好使用Xpath?

对于短配置文件,最好的解决方案是构建哈希映射

XPathFactory xPathfactory = XPathFactory.newInstance();
            XPath xpath = xPathfactory.newXPath();
            XPathExpression expr1 = xpath.compile("/environments/environment");
            XPathExpression expr2 = xpath.compile("@key");
            XPathExpression expr12 = xpath.compile("variable");
            XPathExpression expr121 = xpath.compile("@name");
            XPathExpression expr122 = xpath.compile("@value");

            NodeList environmentNL = (NodeList) expr1.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < environmentNL.getLength(); i++) {
                Node environmentI = environmentNL.item(i);
                String envKey =  (String) expr2.evaluate(environmentI, XPathConstants.STRING);


                NodeList variableNL = (NodeList) expr12.evaluate(environmentI, XPathConstants.NODESET);
                for (int j = 0; j < variableNL.getLength(); j++) {
                    Node variableI = variableNL.item(j);
                    String valueName =  (String) expr121.evaluate(variableI, XPathConstants.STRING);
                    String valueValue =  (String) expr122.evaluate(variableI, XPathConstants.STRING);

                    val.put(envKey+"."+valueName, valueValue);

                }
            }


短配置文件的最佳解决方案是构建哈希映射

XPathFactory xPathfactory = XPathFactory.newInstance();
            XPath xpath = xPathfactory.newXPath();
            XPathExpression expr1 = xpath.compile("/environments/environment");
            XPathExpression expr2 = xpath.compile("@key");
            XPathExpression expr12 = xpath.compile("variable");
            XPathExpression expr121 = xpath.compile("@name");
            XPathExpression expr122 = xpath.compile("@value");

            NodeList environmentNL = (NodeList) expr1.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < environmentNL.getLength(); i++) {
                Node environmentI = environmentNL.item(i);
                String envKey =  (String) expr2.evaluate(environmentI, XPathConstants.STRING);


                NodeList variableNL = (NodeList) expr12.evaluate(environmentI, XPathConstants.NODESET);
                for (int j = 0; j < variableNL.getLength(); j++) {
                    Node variableI = variableNL.item(j);
                    String valueName =  (String) expr121.evaluate(variableI, XPathConstants.STRING);
                    String valueValue =  (String) expr122.evaluate(variableI, XPathConstants.STRING);

                    val.put(envKey+"."+valueName, valueValue);

                }
            }

public static String getProperties(String value) throws ConfigLoaderException {
        String namespace="DEFAULT";
        return getProperties(namespace,value);
    }