参考《java核心技术2》
1 Java如何解析xml文档?
Java 提供了两种XML解析器:
DOM解析器是当XML比较大的时候,消耗比较大的内存。如果只考虑某些元素,可以采用SAM解析器。
如何读入一个XML文档?
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
public class HandleXmlFile {
public static void main(String[] args) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
//xml 路径
File file = new File("/**/test.xml");
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(file);
Element root = doc.getDocumentElement();
//遍历所有节点两种方法
//第一种:
NodeList children = root.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
//instancof 是用来在运行时指出对象是否是特定类的一个实例
System.out.println(i);
if (child instanceof Element) {
Element childElement = (Element)child;
Text textNode = (Text)childElement.getFirstChild();
String text = textNode.getData().trim();
System.out.println(text);
}
//Text text = (Text) child.getFirstChild();
//String str = text.getData().trim();
//System.out.println(str);
}
//第二种
for (Node childNode = root.getFirstChild(); childNode != null;childNode = childNode.getNextSibling()) {
if (childNode instanceof Element) {
Element childElement = (Element)childNode;
Text textNode = (Text)childElement.getFirstChild();
String text = textNode.getData().trim();
System.out.println(text);
}
}
//获取属性
NamedNodeMap attrs = root.getAttributes();
for (int i = 0; i < attrs.getLength(); i++ ){
Node attr = attrs.item(i);
System.out.println(attr.getNodeName());
System.out.println(attr.getNodeValue());
}
System.out.println(root.getTagName());
System.out.println(doc.getXmlEncoding());
System.out.println(doc.getXmlVersion());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里为什么需要判断是Element实例对象呢?
主要因为会获取换行和空白符,不是Element的实例对象,