dom4j 获取子节点

使用dom4j获取xml节点时,有时候该节点还有子节点,可是在dom4j没有直接的方法获取

比如:

 

<?xml version="1.0" encoding="UTF-8"?>

<peoples>
	<people>
		<name>
			<firstName>张</firstName>
			<secondName>三</secondName>
		</name>	
		<age>21</age>
		<sex>m</sex>
	</people>

	<people>
		<name>李四</name>	
		<age>22</age>
		<sex>f</sex>
	</people>
</peoples>

 

此时第一个people中的name还有子节点,该如何输出?

在Element中找了好久没有直接的方法,就只好自己写一个。

认为应该用递归,可是又找不到合适的遍历子节点的方法。

后来看到Element.elements()方法,返回节点的List ,觉得可以使用长度做判断,进行子节点遍历

完整代码如

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

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

public class XmlService {

    public static void readDocument(String file) throws SAXException {
        SAXReader reader = new SAXReader();
        reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
        Document document = null;
        try {
            InputStream inputFile = new FileInputStream(file);
            document = reader.read(inputFile);

        } catch (Exception e) {

            e.printStackTrace();
        }
        List<Element> sonElementList = document.getRootElement().elements();
        getElement(sonElementList);
    }

    private static void getElement(List<Element> sonElemetList) {
        for (Element sonElement : sonElemetList) {
            if (sonElement.elements().size() != 0) {
                System.out.println(sonElement.getName() + ":");
                getElement(sonElement.elements());
            } else {
                System.out.println(sonElement.getName() + ":" + sonElement.getText());
            }
        }
    }


    public static void main(String[] args) throws SAXException {
        XmlService.readDocument("d:\\people.xml");
    }
}

成功读取子节点firstName和fecondName

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值