首页 > 代码库 > XML解析

XML解析

1.DOM

  使用DOM方式解析xml文件,首先通过DocumentBuilderFactory实例创建DocumentBuilder对象,通过该对象的parse(“url”)方法对xml文件进行解析获得Document对象。 

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
//通过DocumentBuilder对象调用parse方法解析
Document document = db.parse("book.xml");

 

1.1 解析文件的属性名和属性值

NodeList bookList = document.getElementsByTagName("book");
System.out.println("共有"+bookList.getLength()+"本书");
//遍历获得每一个book节点
for (int i = 0; i < bookList.getLength(); i++) {
Node book = bookList.item(i);

//下面注释是两种方法获得book属性
// //获得book节点所有属性集合(在不知道属性有多少情况)
NamedNodeMap attrs = book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");
for (int j = 0; j < attrs.getLength(); j++) {
Node attr = attrs.item(j);
//获取属性值
System.out.print(attr.getNodeName()+" ");
System.out.println(attr.getNodeValue());
}

 

//知道book节点有且只有一个属性id
//首先通过强制类型转化为Element类型
Element book = (Element)bookList.item(i);
//获得id属性值
String attrValue = http://www.mamicode.com/book.getAttribute("id");
System.out.println("id属性值为"+attrValue);

1.2 解析文件的节点名和节点值

//获取book节点的子节点集合
NodeList childNotes = book.getChildNodes();
//在解析xml文档时会把文本也解析为该节点下面的子节点,空格解析为文本
System.out.println("第"+(i+1)+"个节点共有"+childNotes.getLength()+"个子节点");
for (int j = 0; j < childNotes.getLength(); j++) {
Node childNote = childNotes.item(j);
//区分出text类型的node及element类型的node
if(childNote.getNodeType() == Node.ELEMENT_NODE){
System.out.print(childNote.getNodeName()+" ");
//不能直接getNodeValue会返回null
//因为把一对节点之间的内容也看成该节点的子节点
System.out.println(childNote.getFirstChild().getNodeValue());

//也可以用getTextContent方法获得节点内容,与getNodeValue不同的是
//如果子节点下仍有子节点则getNodeValue返回null,而getTextContent返回该节点及子节点内容
// System.out.println(childNote.getTextContent());
}
}

}

XML解析