xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <books> <book attribute="T001"> <name> <t> <t1>第一本书</t1> </t> <t>test</t> </name> <price>$14.09</price> </book> </books>
现在想的到name节点下的所有子节点:
<t> <t1>第一本书</t1> </t> <t>test</t>
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DomParse { public DomParse() { //得到DOM解析器的工厂实例 //javax.xml.parsers.DocumentBuilderFactory类的实例就是我们要的解析器工厂 DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance(); try { //通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器 DocumentBuilder dombuilder = domfac.newDocumentBuilder(); //把要解析的XML文档转化为输入流,以便DOM解析器解析它 //InputStream is = new FileInputStream("test.xml"); //解析XML文档的输入流,得到一个Document //由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的 Document doc = dombuilder.parse("test.xml"); //得到XML文档的根节点 //在DOM中只有根节点是一个org.w3c.dom.Element对象。 Element root = doc.getDocumentElement(); System.out.println(root.toString());//.getTextContent()+"--------------"); //得到节点的子节点 //这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,还有一种轮循子节点的方法 NodeList books = root.getChildNodes(); if (books != null) { for (int i = 0; i < books.getLength(); i++) { Node book = books.item(i); if (book.getNodeType() == Node.ELEMENT_NODE) { //取得节点的属性值 //注意,节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE String attribute = book.getAttributes().getNamedItem("attribute").getNodeValue(); System.out.println("attribute: "+attribute); //轮循子节点 for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE) { if (node.getNodeName().equals("name")) { String name = node.getFirstChild().getTextContent(); String name1 = node.getFirstChild().getNodeValue(); System.out.println("name: "+name); System.out.println("name1: "+name1); } if (node.getNodeName().equals("price")) { String price = node.getFirstChild() .getNodeValue(); System.out.println("price"+price); } } } } } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { DomParse domp=new DomParse(); } }
用的dom4j的asXML来解决 也可以。