如何使用Apache Commons解析xml中的配置文件?

敏特拉

我正在使用apache commons configuration 1.10来管理xml配置。这是xml格式的配置文件。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<config>
    <mainServerHostname>MainServer</mainServerHostname>
    <failoverServers>
        <server>
            <ipAddress>192.168.0.5</ipAddress>
            <priority>1</priority>
        </server>
        <server>
            <ipAddress>192.168.0.6</ipAddress>
            <priority>2</priority>
        </server>
    </failoverServers>
</config>

我需要打印以下内容

mainServerHostname=MainServer
failoverServers.server.ipAddress=192.168.0.5
failoverServers.server.priority=1
failoverServers.server.ipAddress=192.168.0.6
failoverServers.server.ipAddress=2

这是我写的代码片段

public void loadXmlFile(String filename) {
    XMLConfiguration config = null;
    try {
        config = new XMLConfiguration(filename);
    } catch (ConfigurationException e) {
        e.printStackTrace();
    }
    List<HierarchicalConfiguration> fields= config. configurationsAt("failoverServers");
    for (Iterator it = fields.iterator(); it.hasNext();) {
        HierarchicalConfiguration sub = (HierarchicalConfiguration) it
                .next();
        Iterator<String> keyIter = sub.getKeys();
        String key, value;
        while (keyIter.hasNext()) {
            key = keyIter.next();
            value = sub.getString(key);
            System.out.println("Key:: " + key + " Val:: " + value);
        }
    }

}

这是运行上面的代码后的结果。既然如此,我将无法遍历整个xml树结构。

Key:: server.ipAddress Val:: 192.168.0.5
Key:: server.priority Val:: 1

谁能帮我获得所需的输出?

Syam S

如果您对apache commons配置很特别,可以这样做

public void loadXmlFile(String filename) {
    XMLConfiguration config = null;
    try {
        config = new XMLConfiguration(filename);
    } catch (ConfigurationException e) {
        e.printStackTrace();
    }
    Iterator<String> keyIter = config.getKeys();
    String key;
    while (keyIter.hasNext()) {
        key = keyIter.next();
        Object prop = config.getProperty(key);
        if(prop instanceof Collection) {
                List<String> values = (List<String>) prop;
                for(String value : values){
                    System.out.println(key + "=" + value);
                }
        } else {
            System.out.println(key + "=" + prop);
        }
    }
}

对于上述xml,它将打印

mainServerHostname=MainServer
failoverServers.server.ipAddress=192.168.0.5
failoverServers.server.ipAddress=192.168.0.6
failoverServers.server.priority=1
failoverServers.server.priority=2

或者,您可以使用StAX解析器来实现此目的。

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

import org.apache.commons.lang3.StringUtils;


public class ConfigParser {

    public static void main(String[] args) throws Exception {
        StringBuilder content = null;
        List<String> parents = new ArrayList<>();
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = 
        factory.createXMLStreamReader(new FileInputStream("prop.xml"));

        while(reader.hasNext()){
          int event = reader.next();

          switch(event){
        case XMLStreamConstants.START_ELEMENT: 
            content = new StringBuilder();
            if(!"config".equalsIgnoreCase(reader.getLocalName())) {
                parents.add(reader.getLocalName());
            }
            break;

        case XMLStreamConstants.CHARACTERS:
            if (content != null) {
                    content.append(reader.getText().trim());
                }
            break;

        case XMLStreamConstants.END_ELEMENT:
            if (content != null) {
                    System.out.println(StringUtils.join(parents, '.') + "=" + content.toString());
                }
            parents.remove(reader.getLocalName());
                content = null;
                break;

        case XMLStreamConstants.START_DOCUMENT:
          break;
          }

        }
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何解析配置文件中的布尔选项

来自分类Dev

如何在shell脚本中解析配置文件(* .conf)?

来自分类Dev

使用configparser解析配置文件中的数字和列表

来自分类Dev

如何保存用Apache Commons Configuration中的属性文件中的值填充的xml配置无法保存

来自分类Dev

如何在java中读取XML配置文件

来自分类Dev

如何使用XML Apache Commons配置读取属性

来自分类Dev

如何使用R解析INI之类的配置文件?

来自分类Dev

xml以使用配置文件

来自分类Dev

Apache配置文件:如何编辑

来自分类Dev

Apache配置文件:如何编辑

来自分类Dev

如何保护PHP中的配置文件?

来自分类Dev

如何在Spring的web.xml中获取特定于配置文件的pom属性?

来自分类Dev

如何在Spring XML配置文件类中为Map属性指定?

来自分类Dev

如何从Webjars解析多个RequireJS配置文件

来自分类Dev

使用R或AWK解析类似JSON的配置文件

来自分类Dev

在 Haskell 中使用 Aeson 解析 JSON 配置文件

来自分类Dev

如何使用Wildfly配置文件中的变量?

来自分类Dev

如何使用Boost程序选项配置文件中的部分

来自分类Dev

如何使用Bloc架构在Flutter中访问配置文件

来自分类Dev

如何使用 firebase 在 ionic 中创建用户配置文件

来自分类Dev

如何在Apache中使用单个配置文件配置多个虚拟主机?

来自分类Dev

我应该如何在 Apache 中使用单个配置文件配置多个虚拟主机?

来自分类Dev

如何在Struts配置文件中的文件夹内配置文件的路径

来自分类Dev

如何在Struts配置文件中的文件夹内配置文件的路径

来自分类Dev

如何在Eclipse中配置ORMLite的表配置文件?

来自分类Dev

如何在Spring配置文件中配置Hibernate

来自分类Dev

如何在Centos中配置网络配置文件?

来自分类Dev

如何删除“ dpkg”配置文件中的配置密钥

来自分类Dev

如何运行 multiCapabilities 从配置文件中读取配置参数

Related 相关文章

  1. 1

    如何解析配置文件中的布尔选项

  2. 2

    如何在shell脚本中解析配置文件(* .conf)?

  3. 3

    使用configparser解析配置文件中的数字和列表

  4. 4

    如何保存用Apache Commons Configuration中的属性文件中的值填充的xml配置无法保存

  5. 5

    如何在java中读取XML配置文件

  6. 6

    如何使用XML Apache Commons配置读取属性

  7. 7

    如何使用R解析INI之类的配置文件?

  8. 8

    xml以使用配置文件

  9. 9

    Apache配置文件:如何编辑

  10. 10

    Apache配置文件:如何编辑

  11. 11

    如何保护PHP中的配置文件?

  12. 12

    如何在Spring的web.xml中获取特定于配置文件的pom属性?

  13. 13

    如何在Spring XML配置文件类中为Map属性指定?

  14. 14

    如何从Webjars解析多个RequireJS配置文件

  15. 15

    使用R或AWK解析类似JSON的配置文件

  16. 16

    在 Haskell 中使用 Aeson 解析 JSON 配置文件

  17. 17

    如何使用Wildfly配置文件中的变量?

  18. 18

    如何使用Boost程序选项配置文件中的部分

  19. 19

    如何使用Bloc架构在Flutter中访问配置文件

  20. 20

    如何使用 firebase 在 ionic 中创建用户配置文件

  21. 21

    如何在Apache中使用单个配置文件配置多个虚拟主机?

  22. 22

    我应该如何在 Apache 中使用单个配置文件配置多个虚拟主机?

  23. 23

    如何在Struts配置文件中的文件夹内配置文件的路径

  24. 24

    如何在Struts配置文件中的文件夹内配置文件的路径

  25. 25

    如何在Eclipse中配置ORMLite的表配置文件?

  26. 26

    如何在Spring配置文件中配置Hibernate

  27. 27

    如何在Centos中配置网络配置文件?

  28. 28

    如何删除“ dpkg”配置文件中的配置密钥

  29. 29

    如何运行 multiCapabilities 从配置文件中读取配置参数

热门标签

归档