元素(Element)和结点(Node)的区别
素(Element)和结点(Node)的区别,
元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如<div>...</div>。
但是
一个结点不一定是一个元素,而一个元素一定是一个结点。
<a>
DOM将文档中的所有都看作节点 node>element
1DOM在解析文档的时候按整个文档的结构生成一棵树,全部保存在内存
优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作;缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理。
node有几个子类型:
Element是可以有属性和子节点的node。
Element是从Node继承的
<?
xml
version="1.0"
?>
<
students
>
<
student
number
="
ITCAST_1001
"
>
<
name
>
zhangSan
</
name
>
<
age
>
20
</
age
>
<
sex
>
male
</
sex
>
</
student
>
<
student
number
="
ITCAST_1002
"
>
<
name
>
liSi
</
name
>
<
age
>
25
</
age
>
<
sex
>
female
</
sex
>
</
student
>
</
students
>
import
java.io.File;
import
javax.xml.parsers.DocumentBuilder;
import
javax.xml.parsers.DocumentBuilderFactory;
import
org.junit.Test;
import
org.w3c.dom.Document;
import
org.w3c.dom.Element;
import
org.w3c.dom.Node;
import
org.w3c.dom.NodeList;
public
class
Demo1 {
@Test
public
void
fun1()
throws
Exception {
/*
* 得到Document
* 1. 创建工厂
* 2. 通过工厂得到解析器
* 3. 通过解析来解析xml,得到Document
*/
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(newFile("src/students.xml"));
////////////////////////////////////////////////
/*
* 遍历Document
* 1. 从Document中获取根元素,即文档元素。
* 2. 通过root元素获取它的所有子元素。
*/
Element root = doc.getDocumentElement();
NodeList stuNodeList= root.getElementsByTagName(
"student"
);
获取student元素的集合
/*
*3. 循环遍历stuNodeList,获取每个student元素
*/
for
(
int
i = 0; i < stuNodeList.getLength(); i++) {
Node node = stuNodeList.item(i);
Element stuEle = (Element) node;
//因为stuNodeList中都是学生元素,所以我们可以大胆强转
Element是从Node继承的
素(Element)和结点(Node)的区别,
元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如<div>...</div>。但是一个结点不一定是一个元素,而一个元素一定是一个结点。
String number = stuEle.getAttribute(
"number"
);
// 获取stuEle的所有名为name的子元素,返回值为NodeList
// 再调用NodeList的item(0),因为我们知道一个学生元素最多就一个name子元素
String name = stuEle.getElementsByTagName(
"name"
).item(0).getTextContent();
String age = stuEle.getElementsByTagName(
"age"
).item(0).getTextContent();
String sex = stuEle.getElementsByTagName(
"sex"
).item(0).getTextContent();
System.
out
.println(number +
","
+ name +
","
+ age +
","
+ sex);
}
}