friends.xml
<?xml version="1.0" encoding="utf-8"?>
<friends date="2012">
<!--此处为注释-->
<friend id="1">
<姓名>小红</姓名>
<QQ>123456789</QQ>
</friend>
<friend>
<姓名>小平</姓名>
<QQ>12345678</QQ>
</friend>
<friend>
<姓名 mark="hello">小敏</姓名>
<QQ>1234567</QQ>
</friend>
<friend>
<姓名>小良</姓名>
<QQ>987654321</QQ>
</friend>
<friend>
<姓名>小健</姓名>
<QQ>98765432</QQ>
</friend>
</friends>
DOM parse XML
import java.io.File ;
import javax.xml.parsers.DocumentBuilderFactory ;
import javax.xml.parsers.DocumentBuilder ;
import org.w3c.dom.Element ;
import org.w3c.dom.Document ;
import org.w3c.dom.NamedNodeMap ;
import org.w3c.dom.NodeList ;
import org.w3c.dom.Attr ;
import org.w3c.dom.Node ;
import org.w3c.dom.Comment ;
//利用 递归 dom 解析任何xml文档,把xml文档加载到内存,占用内存大,可随机访问
public class RecursionDOM_XML
{
public static void main(String[] args) throws Exception
{
//1.获取dom解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance() ;
//2.获取具体的dom解析器
DocumentBuilder db = dbf.newDocumentBuilder() ;
//获取xml文档的 根节点
Document document = db.parse(new File("friends.xml") );
//获取文档的 根元素节点
Element e = document.getDocumentElement() ;
parseXML(e) ;
}
public static void parseXML(Element element)
{
//获取 元素节点 的 信息
String name = element.getNodeName() ;
System.out.print("< " + name) ;
//获取此元素节点的属性
NamedNodeMap map = element.getAttributes() ;
//获取目前element元素节点下的 孩子节点(包括空格)
NodeList child = element.getChildNodes() ;
if (null != map)
{
for (int i = 0; i < map.getLength(); i++ )
{
Attr attr = (Attr)map.item(i) ;
String name1 = attr.getName() ;
String value1 = attr.getValue() ;
System.out.print(" " + name1 +"=\"" + value1 +"\"") ;
}
}
System.out.print(" >") ;
for (int j = 0; j < child.getLength() ;j++ )
{
Node node = child.item(j) ;
//判断该节点是不是 元素节点 ,递归路口
if (node.getNodeType() == Node.ELEMENT_NODE)
{
//开始递归
parseXML((Element)node) ;
}
//判断该节点是不是 文本,递归出口
else if (node.getNodeType() == Node.TEXT_NODE)
{
System.out.print(node.getNodeValue() + "") ;
}
//判断该节点是不是 注释
else if (node.getNodeType() == Node.COMMENT_NODE)
{
System.out.print("<!--");
Comment comment = (Comment)node ;
//注释内容
String data = comment.getData() ;
System.out.print(data);
System.out.print("-->");
}
}
System.out.println("</" + name + ">" ) ;
}
}