document object model 文档对象模型
package dom ;
import java.io.* ;
import org.w3c.dom.* ;
import javax.xml.parsers.* ;
public class DOMDemo {
public static void main(String args[]) throws Exception {
// 取得DocumentBuilderFactory类的对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
// 取得DocumentBuilder类的对象
DocumentBuilder build = factory.newDocumentBuilder() ;
File directory = new File("");//设定为当前文件夹
// System.out.println(directory.getCanonicalPath());//获取标准的路径
// System.out.println(directory.getAbsolutePath());//获取绝对路径
String basepath=directory.getAbsolutePath();
String path=basepath+"/xmlfile/dom_demo_01.xml";
Document doc = build.parse(new File(path) );
NodeList nl = doc.getElementsByTagName("name") ;
// 输出节点
System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue()) ;
}
}
xml文件是这样的
parse是分析的意思
你好,牛牛,老大,这几个节点就是nodelist nl
nl.item(1)就是你好标签
nl.item(2)是牛牛
nl.item(3)就是老大
getFirstChild获取文本节点
getNodeValue获取节点的内容,这个肯定是最后调用
这里既然使用到了newInstance 就来扯一扯 new newInstance Class.forName
newInstance: 弱类型。低效率。只能调用无参构造,是单例模式,也就是只可以获取一个实例,而new可以获取很多实例
new: 强类型。相对高效。能调用任何public构造。
有个比喻:newInstance应该是相亲,必须提供必要的参数(房子,车子等),你对这个对象还不甚了解,只知道基本大概属性(比如女方的名字(类名),以及人家期待的刚性需求房子车子票子(参数)),最后结果很大程度上取决于你的参数的质量。
new是谈恋爱,你对这个对象比较了解了,比如刚性需求这一快,有一个public构造函数,对应的就是外省的人必须房子车子票子,三者必须全,而且不是能是空。但是他还有一个包内的构造函数,本地区的只要房子车子就行了,甚至还有一个受保护的构造,她爹妈有招女婿的倾向,如果你知道这一点车房全面,人家给你提供车房。恋爱是否成功往往取决于你对这个对象是否了解。
new是自己下厨,做饭自己吃。newInstance是外面吃别人做给你吃。
使用newInstance一定先加载这个类到jvm虚拟机里面,也就是加载class文件
用法是Class.forName(xxxx).newInstance()
在这里,javax.xml.parsers.DocumentBuilderFactory这个类并没有手动加载,直接调用newInstance方法了,所以只有可能是这个类和常用类String什么的一样,虚拟机自动帮你加载了,这个包也是java自带的包