import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import org.w3c.dom.Document;  //这个接口定义分析,创建DOM文档的一系列方法,是操作DOM的基础
import org.w3c.dom.Element;  //这个接口提供了获取,修改XML元素名字和属性的方法
import org.w3c.dom.NodeList;  //提供了获得节点个数和当前节点的方法
import org.w3c.dom.Node;  //这个接口提供了处理节点和子节点的方法
import org.w3c.dom.NamedNodeMap;
public class testDom
{
   public static void main (String args[])
   {
      File docFile = new File("orders.xml");
      Document doc = null;
  //Document newdoc = null;
      try
  {
   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   //dbf.setValidating(true);//解析器不验证文档。将这个参数设置为 true 可打开验证功能
   //setIgnoringComments(true);//是否要忽略文件中的注释。其默认值为 false
   //DocumentBuilderFactory 对象创建 DocumentBuilder
   DocumentBuilder db = dbf.newDocumentBuilder();
   //DocumentBuilder 执行实际的解析以创建 Document 对象
   doc = db.parse(docFile);
   //根据创建的文档对象取得根元素
   Element root = doc.getDocumentElement();
                     appointOrder (root,"result");
                     } 
  catch (Exception e)
  {
         System.out.print("Problem parsing the file: "+e.getMessage());
       }
   }
private static void appointOrder(Node start,String elemName) //遍历整个xml文档后读取指定节点的属性
   {
   if (start.getNodeType() == start.ELEMENT_NODE) //返回节点的类型是否是元素节点
   {   
  NamedNodeMap startAttr = start.getAttributes(); 
  for (int i = 0;i < startAttr.getLength();i++) 
  {
 Node attr = startAttr.item(i);
 if (attr.getNodeName().equals(elemName))
 {
System.out.println("appointOrderAttribute:  "+ attr.getNodeName()+" = "+attr.getNodeValue());
 }
  }
   } for (Node child = start.getFirstChild();child != null;child = child.getNextSibling())
{
appointOrder (child,elemName);
}
   }
}