将上面第一张图片中的xml文件在控制台都打印成第二张图片所显示的格式,采用递归方法实现。代码如下:
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("person.xml"));
Element root = doc.getDocumentElement();
parserElement(root);
}
private static void parserElement(Element element){
String tagName = element.getNodeName();
NodeList nodeList = element.getChildNodes();
System.out.print("<"+ tagName);
//获得所有属性
NamedNodeMap map = element.getAttributes();
//如果存在属性
if(null != map){
for(int i = 0; i < map.getLength(); i++){
//获得根元素的每一个属性
Attr attr = (Attr) map.item(i);
String attrName = attr.getName();
String attrValue = attr.getValue();
System.out.print(" " + attrName + "=\"" + attrValue + "\"");
}
}
System.out.print(">");
for(int i = 0; i < nodeList.getLength(); i ++){
Node node = nodeList.item(i);
//获得结点的类型
short nodeType = node.getNodeType();
if(nodeType == Node.ELEMENT_NODE){
//如果是元素,继续递归
parserElement((Element) node);
}else if(nodeType == Node.TEXT_NODE){
//递归出口
System.out.print(node.getNodeValue());
}else if(nodeType == Node.COMMENT_NODE){
//如果是注释
System.out.print("<!--");
Comment comment = (Comment)node;
String data = comment.getData();
System.out.print(data);
System.out.print("-->");
}
}
//关闭根结点
System.out.print("</" + tagName + ">");
}