使用dom4j解析xml示例

使用dom4j解析xml示例

xml内容

<?xml version="1.0" encoding="utf-8"?>
<nagios>
    <status>success</status>
    <host_list>
        <host ip="10.1.1.103" online="up">
            <service name="linux-cpu" status="critical" last_check="06-30-2020 17:45:57">
                <![CDATA[ (CPU OK : user=0% system=0% iowait=0% idle=100%) ]]></service>
            <service name="linux-disk" status="ok" last_check="06-30-2020 17:49:17">
                <![CDATA[ DISK OK - free space: / 26615 MB (71.52% inode=97%): ]]></service>
            <service name="linux-mem" status="critical" last_check="06-30-2020 01:43:09">
                <![CDATA[ (CPU OK : user=0% system=0% iowait=0% idle=100%) ]]></service>
        </host>
        <host ip="10.1.1.150" online="up">
            <service name="linux-cpu" status="ok" last_check="06-30-2020 17:46:47">
                <![CDATA[ CPU OK : user=0% system=0% iowait=0% idle=100% ]]></service>
            <service name="linux-disk" status="ok" last_check="06-30-2020 17:50:07">
                <![CDATA[ DISK OK - free space: / 33521 MB (90.08% inode=97%): ]]></service>
            <service name="linux-mem" status="critical" last_check="06-30-2020 01:43:59">
                <![CDATA[ Connection refused or timed out ]]></service>
        </host>
        <host ip="10.1.1.155" online="down">
            <service name="linux-cpu" status="critical" last_check="06-30-2020 17:47:37">
                <![CDATA[ Connection refused or timed out ]]></service>
            <service name="linux-disk" status="critical" last_check="06-30-2020 17:50:57">
                <![CDATA[ Connection refused or timed out ]]></service>
            <service name="linux-mem" status="critical" last_check="06-30-2020 01:44:49">
                <![CDATA[ Connection refused or timed out ]]></service>
        </host>
        <host ip="10.1.1.156" online="up">
            <service name="linux-cpu" status="ok" last_check="06-30-2020 17:48:27">
                <![CDATA[ CPU OK : user=0% system=0% iowait=0% idle=100% ]]></service>
            <service name="linux-disk" status="ok" last_check="06-30-2020 01:52:19">
                <![CDATA[ DISK OK - free space: / 425444 MB (95.70% inode=99%): ]]></service>
            <service name="linux-mem" status="ok" last_check="06-30-2020 01:45:39">
                <![CDATA[ OK - 3.5% (139516 kB) used. ]]></service>
        </host>
    </host_list>
</nagios>

使用java进行硬性解析
1.在pom.xml文件中添加dom4j依赖

<!--dom4j xml解析-->
 <dependency>
   <groupId>dom4j</groupId>
   <artifactId>dom4j-core</artifactId>
   <version>1.4-dev-8</version>
 </dependency>

2.java解析示例代码

public static void test1() throws Exception{
        List<Map<String,Object>> result = new ArrayList<>();
        String xmlFilePath = "demo.xml";
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(xmlFilePath);
        Element nagios = document.getRootElement();
        Element status = nagios.element("status");
        String statusText = status.getText();
        if (statusText.equalsIgnoreCase("success")) {
            Element hostList = nagios.element("host_list");
            List<Element> hostLists = hostList.elements();
            for (Element host : hostLists) {
                Map<String,Object> hostMap = new HashMap<>();
                hostMap.put("ip",host.attributeValue("ip"));
                hostMap.put("online",host.attributeValue("online"));
                List<Map<String,Object>> data = new ArrayList<>();
                /*System.out.println("------开始------");
                System.out.println("ip:"+host.attributeValue("ip")+",online:"+host.attributeValue("online"));*/
                List<Element> services  = host.elements();
                for (Element service : services) {
                    Map<String,Object> obj = new HashMap<>();
                    obj.put("name",service.attributeValue("name"));
                    obj.put("status",service.attributeValue("status"));
                    obj.put("last_check",service.attributeValue("last_check"));
                    obj.put("content",service.getText().trim());
                    data.add(obj);
                    /*System.out.println("name:"+service.attributeValue("name"));
                    System.out.println("status:"+service.attributeValue("status"));
                    System.out.println("last_check:"+service.attributeValue("last_check"));
                    System.out.println("data:"+service.getText().trim());*/
                }
                hostMap.put("data",data);
                result.add(hostMap);
                /*System.out.println("-------结束----------");*/
            }
        }
        String s = JSONArray.fromObject(result).toString();
        System.out.println(s);
    }

3.输出示例json串

[
    {
        "data":[
            {
                "name":"linux-cpu",
                "last_check":"06-30-2020 17:45:57",
                "content":"(CPU OK : user=0% system=0% iowait=0% idle=100%)",
                "status":"critical"
            },
            Object{...},
            Object{...}
        ],
        "ip":"10.1.1.103",
        "online":"up"
    },
    {
        "data":Array[3],
        "ip":"10.1.1.150",
        "online":"up"
    },
    {
        "data":Array[3],
        "ip":"10.1.1.155",
        "online":"down"
    },
    {
        "data":Array[3],
        "ip":"10.1.1.156",
        "online":"up"
    }
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的dom4j解析xml文件的示例: 假设我们有一个名为“person.xml”的xml文件,内容如下: ``` <?xml version="1.0" encoding="UTF-8"?> <person> <name>张三</name> <age>28</age> <gender>男</gender> <address>北京市海淀区</address> </person> ``` 我们可以使用dom4j库来解析这个xml文件并读取其中的数据。下面是示例代码: ```java import java.io.File; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jDemo { public static void main(String[] args) throws Exception { // 创建解析器 SAXReader reader = new SAXReader(); // 读取xml文件 Document document = reader.read(new File("person.xml")); // 获取根元素 Element root = document.getRootElement(); // 获取子元素 Iterator<Element> it = root.elementIterator(); while (it.hasNext()) { Element element = it.next(); String name = element.getName(); String value = element.getText(); System.out.println(name + ": " + value); } } } ``` 输出结果如下: ``` name: 张三 age: 28 gender: 男 address: 北京市海淀区 ``` 在这个示例中,我们首先创建了一个SAXReader对象来解析xml文件。然后,我们使用read()方法读取xml文件并返回一个Document对象。接下来,我们获取根元素和其子元素,并使用elementIterator()方法遍历所有子元素。对于每个子元素,我们使用getName()方法获取其标签名,使用getText()方法获取其文本内容,并将它们打印到控制台上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值