Java 解析自定义xml配置文件
我的目标是Java1.5 我有另一个软件供应商提供的自定义配置文件,我需要读取它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
<?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);
}