您的位置:首页 > 编程语言 > Java开发

Java Dom 递归解析XML

2015-03-17 10:34 309 查看
package com.bryant.xml;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
<student id="1" stu="s">
<name>
<firstName>bryant</firstName>
<lastName>tu</lastName>
</name>
<age>25</age>
<!-- class -->
<class id="1">
<name>No.1</name>
</class>
</student>
* </pre>
*/
public class TestDom
{
public static void main(String[] args) throws Exception
{
parse("E:\\student.xml");
}

static void parse(String path) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(new File(path));
Element root = doc.getDocumentElement();
parse(root);
}

static void parse(Element element)
{
String nodeName = element.getNodeName();
System.out.print("<" + nodeName);
parseAttr(element);
System.out.print(">");

NodeList nodeList = element.getChildNodes();
if (nodeList != null)
{
int length = nodeList.getLength();
for (int i = 0; i < length; i++)
{
Node node = nodeList.item(i);
short nodeType = node.getNodeType();
if (nodeType == Node.ELEMENT_NODE)
{
//递归
parse((Element) node);
}
else if (nodeType == Node.TEXT_NODE)
{
//这里会读出\n\t,所以打印不用换行
System.out.print(node.getNodeValue());
}
else if (nodeType == Node.COMMENT_NODE)
{
System.out.print("<!--" + node.getNodeValue() + "-->");
}
}
}
System.out.print("</" + nodeName + ">");
}

static void parseAttr(Element element)
{
NamedNodeMap attrMap = element.getAttributes();
if (attrMap != null && attrMap.getLength() > 0)
{
System.out.print(" ");
int length = attrMap.getLength();
for (int i = 0; i < length; i++)
{
Node attr = attrMap.item(i);
String attrName = attr.getNodeName();
String attrValue = attr.getNodeValue();
if (i > 0)
{
System.out.print(" ");
}
System.out.print(attrName + "=\"" + attrValue + "\"");
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: