DOM解析(一)
采用dom解析,会将xml文档全部载入到内存当中,然后将xml文档中的所有内容转换为tree上的节点(对象)。
优点:
可以随机解析
可以修改文件
可以创建xml文件
缺点:
适合解析小文件,对内存要求高
1.1.1 输出xml 各个 关键信息(使用dom解析)
package xml2; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class domTest { public static void main(String[] args) throws Exception { // 创建工厂 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/xml2/desk.xml"); // NodeList list = document.getElementsByTagName("disk"); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i);// 有两个disk ,通过索引可以获取任意一个disk // 打印node节点中的属性节节点的name ,和value ,同时,属性也有可能为多个,所以返回的还是一个集合。 System.out.println( node.getAttributes().item(0).getNodeName() + ":" + node.getAttributes().item(0).getNodeValue()); NodeList list2 = node.getChildNodes(); // 因为disk标签得子节点有空格,它没有子节点,所以不考虑这个得话,会出先空指针异常 // 解决这问题得话,直接判段一下子节点得type值是否为1(元素节点) for (int j = 0; j < list2.getLength(); j++) { if (list2.item(j).getNodeType() == 1) { System.out.println(list2.item(j).getNodeName() + ":" + list2.item(j).getTextContent()); } } } // Node attributes = node.getAttributes().item(0); // System.out.println(attributes); // System.out.println(attributes.getNodeName()); // System.out.println(attributes.getNodeType()); // System.out.println(attributes.getNodeValue()); } }
<?xml version="1.0" encoding="UTF-8"?> <disks> <disk name='c盘'> <size>10G</size> <directory>100</directory> <file>200</file> </disk> <disk name='d盘'> <size>20G</size> <directory>200</directory> <file>3000</file> </disk> </disks>