使用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