黑马程序员技术交流社区
标题:
XML解析方式一dom解析
[打印本页]
作者:
冯超
时间:
2013-5-18 10:11
标题:
XML解析方式一dom解析
<books>
<book id="1">
<name>fengchao</name>
<age>21</age>
</book>
<book id="2">
<name>fengchao11</name>
<age>213</age>
</book>
</books>
复制代码
book.xml存放于src目录下。
解析该book文件需要一个复制类Book.java如下:
package book;
public class Book {
private String boodid;
public String getBoodid() {
return boodid;
}
public void setBoodid(String boodid) {
this.boodid = boodid;
}
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "name :" + name + "::: age" + age;
}
}
复制代码
解析类如下:
package book;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DomHandler {
public static void main(String[] args) {
DomHandler dom = new DomHandler();
dom.process();
}
public List<Book> process() {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(false);
domFactory.setNamespaceAware(true);
try {
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document document = builder.parse("src/book.xml");
Node node = document.getFirstChild();
//System.out.println(node.getNodeName());
//得到所有的book结点
NodeList nodes = node.getChildNodes(); //返回他得子结点
//System.out.println(nodes.getLength());
List<Book> list = new ArrayList<Book>();
for(int i = 0; i < nodes.getLength(); i++) {
Book book = new Book();
Node bookNode = nodes.item(i);
if(!bookNode.hasChildNodes()) {
continue;
}
NamedNodeMap attributes = bookNode.getAttributes();
String bookid = attributes.getNamedItem("id").getNodeValue();
book.setBoodid(bookid);
//获取book中的结点 并存入Book中
Node child = bookNode.getFirstChild(); //获取第一个结点
for(int j = 0; j < bookNode.getChildNodes().getLength(); j++) {
if(j != 0)
child = child.getNextSibling();
String name = child.getNodeName();
//System.out.println(name);
if(name.equals("name"))
book.setName(child.getTextContent());
if(name.equals("age"))
book.setAge(Integer.valueOf(child.getTextContent()));
}
list.add(book);
}
return list;
} 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();
}
return null;
}
}
复制代码
测试通过。结果为:
name :fengchao::: age21
name :fengchao11::: age213
有兴趣的同学也可以学习一下SAX解析。
结束!
作者:
萌小子
时间:
2013-5-18 10:42
学习一下,解析XML一直不是很熟
作者:
袁梦希
时间:
2013-5-18 12:45
如果问题已经解决了,那么大家请把帖子的类型改为“已解决”,在自己帖子的左下角点编辑,然后选择帖子的分类进行改正
。{:soso_e163:}
帖子的问题还没解决 哈哈
作者:
冯超
时间:
2013-5-18 19:48
袁梦希 发表于 2013-5-18 12:45
如果问题已经解决了,那么大家请把帖子的类型改为“已解决”,在自己帖子的左下角点编辑,然后选择帖子的分 ...
问题我不是解决了么·~·····
元梦溪
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2