DOM解析XML
先创建DocumentBuilderFactory对象利用newInstanse()方法
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
再创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
通过DocumentBuilder对象的parse方法加载book.xml文件到当前目录项目下
Document document = db.parse(“books.xml”);
获取节点集合:
getElementsByTagName(String arg0)方法,返回值为NodeList 节点集合
NodeList booklist = document.getElementsByTagName(“book”);
获取节点集合长度:
getLength()
用循环遍历节点集合
Node book = booklist.item(i);//item(i) 方法获取其中的一个节点 返回值Node节点 nodelist的索引值从0开始
通过getAttributes获取book节点的所有属性集合 返回NameNodeMap - Node *
NamedNodeMap attrs = book.getAttributes();
attrs.getLength()获取属性个数
通过item(j)方法来获取book节点的某一属性
Node attr = attrs.item(j);
通过getNodeName获取属性名
通过getNodeValue获取属性值
前提:已经知道book节点属性,有且只能有一个id属性 如下:
//将book节点进行强制转换成Element类型
Element book = (Element)booklist.item(i);
//通过Element的getAttribute(“id”)的方法获取属性值
String attrValue = book.getAttribute(“id”);
//通过getChildNodes获取book的子节点
NodeList childNodes = book.getChildNodes();
通过childNodes.item获取每个节点,再用getNodeName获取每个节点名
//前提通过getNodeType方法来获取节点类型是否为ELEMENT_NODE
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
childNodes.item(k).getNodeName());//getNodeName()获取节点名
//通过getFistChild获取ELEMENT子节点的子节点(TEXT_NODE),从而获取节点值
childNodes.item(k).getFirstChild().getNodeValue());
getTextContent() 获取节点中间的值 包括子节点的所有值
childNodes.item(k).getTextContent());
public static void main(String[] args) {
//创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
//通过DocumentBuilder对象的parse方法加载book.xml文件到当前目录项目下
Document document = db.parse("books.xml");
//获取book节点的集合
NodeList booklist = document.getElementsByTagName("book");
//通过nodelist的getLength()方法可以获取booklist的长度
System.out.println("一共有"+booklist.getLength()+"本书");
//遍历每一个book节点
for(int i = 0; i < booklist.getLength(); i++) {
System.out.println("================下面开始遍历第"+(i+1)+"本书的内容================");
//通过item(i)方法来获取一个book节点, nodelist的索引值从0开始
// Node book = booklist.item(i);
// //通过getAttributes获取book节点的所有属性集合
// NamedNodeMap attrs = book.getAttributes();
// System.out.println("第"+(i+1)+"本书共有"+ attrs.getLength()+"个属性");
// //通过for循环来遍历book节点属性集合
// for(int j = 0; j < attrs.getLength(); j++) {
// //通过item(j)方法来获取book节点的某一属性
// Node attr = attrs.item(j);
// //通过getNodeName获取属性名
// System.out.print("属性名:"+attr.getNodeName());
// //通过getNodeValue获取属性值
// System.out.println("属性值:"+attr.getNodeValue());
// }
**//前提:已经知道book节点属性,有且只能有一个id属性**
//将book节点进行强制转换成Element类型
Element book = (Element)booklist.item(i);
//通过Element的getAttribute("id")的方法获取属性值
String attrValue = book.getAttribute("id");
System.out.println("id属性的属性值为:"+attrValue);
//通过getChildNodes获取book的子节点
NodeList childNodes = book.getChildNodes();
System.out.println("第"+(i+1)+"本书具有"+childNodes.getLength()+"个子节点!");
for(int k=0; k<childNodes.getLength(); k++) {
//通过childNodes.item获取每个节点,再用getNodeName获取每个节点名
//前提通过getNodeType方法来获取节点类型是否为ELEMENT
if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
System.out.print("第"+(k+1)+"个节点的节点名为:"+childNodes.item(k).getNodeName());
//通过getFistChild获取ELEMENT子节点的子节点
System.out.println("--节点值C:"+childNodes.item(k).getFirstChild().getNodeValue());
// System.out.println("--节点值是:"+childNodes.item(k).getTextContent());
}
}
System.out.println("================结束遍历第"+(i+1)+"本书的内容================");
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}