日期:2014-05-18  浏览次数:20765 次

java 解析 xml文件, 多层节点读取,请高手帮忙啊 !我要解析的XML已经在下面
我邮箱是:920957807@qq.com
希望详解,我能读取第一层节点,但是节点里面的节点就不会了,
其中<product>节点任意多个 ,但是小于等于10个
<?xml version="1.0" encoding="UTF-8"?>
<RequestStocksInfo>
<MemberNO>null</MemberNO>
<WareHouseCode>CK-0001</WareHouseCode>
<SyncId>ffffffff</SyncId>
<Remark>987654321</Remark>
<products>
<product>
<name>fffffff</name>
<spuCode>ffsdf</spuCode>
<units>sfs</units>
<model>faf</model>
<Specification>af</Specification>
<status>afasfaf</status>
</product>
<product>
<name>sfs</name>
<spuCode>fsf</spuCode>
<units>safasf</units>
<model>afaf</model>
<Specification>af</Specification>
<status>afa</status>
</product>
</products>
</RequestStocksInfo>

------解决方案--------------------
Java code


public class DOMParseXML {
 
 public void scanXML(File thefile) {
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = null;
  Document doc = null;
  try {
   db = dbf.newDocumentBuilder();
  } catch (ParserConfigurationException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   doc = db.parse(thefile);
  } catch (SAXException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  Element root = doc.getDocumentElement();
  echoNode(root);
 }

 private void echoNode(Node node) {
  
  switch (node.getNodeType()) {
  case Node.ELEMENT_NODE:
   System.out.println("This is an element: ");
   System.out.println("Name: " + node.getNodeName() + "/n");
   if (node.hasChildNodes()) {
    NodeList nlist = node.getChildNodes();
    for (int i = 0; i < nlist.getLength(); i++) {
     echoNode(nlist.item(i));
    }
   }
   
   if (node.hasAttributes()) {
    NamedNodeMap namedNodeMap = node.getAttributes();
    for (int i = 0; i < namedNodeMap.getLength(); i++) {
     echoNode(namedNodeMap.item(i));
    }
   }
   break;
   
  case Node.ATTRIBUTE_NODE:
   System.out.println("This is an attribute: ");
   System.out.println("Name :" + node.getNodeName());
   System.out.println("Value :" + node.getNodeValue() + "/n");
   break;
   
  case Node.TEXT_NODE:
   System.out.println("This is a text: ");
   System.out.println("Content: /" " + node.getNodeValue() + "/"/n");
   break;
   
  default:
   System.out.println("### Node type: " + node.getNodeType() + "###");
   System.out.println("Name: " + node.getNodeName());
   System.out.println("Value: " + node.getNodeValue());
   break;
  }
 }
 
 public static void main(String[] args) {
  DOMParseXML test = new DOMParseXML();
  test.scanXML(new File("F://1.xml"));
 }

}