DOM(Document Object Model,文档对象模型)是w3c定义的一套规范标准,规定了解析文档的接口。
DOM规范中所指的文档比较广泛,包括XML文件和HTML文件。
在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。
具体示例如下:
DOM解析器的代码:
public class DomXmlParser implements XmlParse {
public static void main(String[] args) {
DomXmlParser parser = new DomXmlParser();
List<Book> bookList = parser.parseXml("books.xml");
for(Book book:bookList){
System.out.println(book);
}
}
@Override
public List<Book> parseXml(String fileName) {
List<Book> bookList = new ArrayList<Book>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document document = null;
try {
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
document = documentBuilder.parse(new File(fileName));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Node rootNode = document.getDocumentElement();// 获得整体的树状结构的根节点
NodeList bookNodeList = rootNode.getChildNodes();// 获得子节点(Book节点)
for (int i = 0; i < bookNodeList.getLength(); i++) {
Node bookItem = bookNodeList.item(i);// 获得单个Book节点
if (bookItem.getNodeName().equals("book")) {
Book book = new Book();
NamedNodeMap map = bookItem.getAttributes();
Node namedItem = map.getNamedItem("bookno");
String bookNoValue = namedItem.getNodeValue();
book.setBookNo(bookNoValue);
NodeList childNodesList = bookItem.getChildNodes();
for (int j = 0; j < childNodesList.getLength(); j++) {
Node node = childNodesList.item(j);
String str = node.getNodeName();
if (str.equals("title")) {
book.setName(node.getTextContent().trim());
} else if (str.equals("price")) {
book.setPrice(Integer.parseInt(node.getTextContent().trim()));
}else if (str.equals("author")) {
book.setAuthor(node.getTextContent().trim());
}
}
bookList.add(book);
}
}
return bookList;
}
}
book.xml代码:
``
<?xml version="1.0" encoding="utf-8"?>
<books>
<book bookno="001">
<title>Java设计</title>
<price>80</price>
<author>张三</author>
</book>
<book bookno="002">
<title>android设计</title>
<price>100</price>
<author>李四</author>
</book>
</books>
Book类代码:
public class Book {
private String name;
private String author;
private int price;
private String bookNo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public Book() {
super();
}
public String getBookNo() {
return bookNo;
}
public void setBookNo(String bookNo) {
this.bookNo = bookNo;
}
public Book(String name, String author, int price, String bookNo) {
super();
this.name = name;
this.author = author;
this.price = price;
this.bookNo = bookNo;
}
@Override
public String toString() {
return "Book [name=" + name + ", author=" + author + ", price=" + price
+ ", bookNo=" + bookNo + "]";
}
}