public class DOMTest{
public static void main(String[] args) throws Exception{
//第一步:创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//第二步:File
File file = new File("stud.xml");
//第三步:file give to parser
Document document = db.parse(file);
//第四步:
NodeList nodeList = document.getElementsByTagName("student");
Node node = nodeList.item(1);
NamedNodeMap map = node.getAttributes();
//循环遍历
// for (int i = 0; i < map.getLength(); i++) {
// Attr attr = (Attr) map.item(i);
// System.out.println(attr.getName() + "<<<<<<" + attr.getValue());
// }
//直接取值
Attr attr = (Attr) map.getNamedItem("ID");
System.out.println(attr.getValue());
Node nameNode = node.getFirstChild();
//两种方式:取节点里面的值
//方式一:封装了方式二
String str = nameNode.getTextContent();
System.out.println(str);
//方式二:最基本
Node textNode = nameNode.getFirstChild();
String str = textNode.getNodeValue();
System.out.println("<<<<<<" + str);
//---------------------------------------------------------------
DOMTest t = new DOMTest();
List<Student> list = t.parse(document);
for (Student s : list) {
System.out.println(s.getId() + "\t" + s.getName() + "\t" + s.getBirth());
}
//---------------------------------------------------------------
Element e2 = document.getDocumentElement();
t.parse2(e2);
//---------------------------------------------------------------
Element e3 =document.getDocumentElement();
t.parse3(e3);
List<Student> list =t.getResult();
for(Student s:list){
System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getBirth()+"\t");
}
}
/**
*有限次数的循环,如果很多层的话,要嵌套太多的for循环
*/
public List<Student> parse(Document document) throws Exception {
List<Student> list = new ArrayList<Student>();
NodeList nodeList = document.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
Node studentNode = nodeList.item(i);
Student s = new Student();
NamedNodeMap map = studentNode.getAttributes();
Attr attr = (Attr) map.getNamedItem("ID");
s.setId(Long.parseLong(attr.getValue()));
NodeList nodeList2 = studentNode.getChildNodes();
for (int j = 0; j < nodeList2.getLength(); j++) {
Node node = nodeList2.item(j);
if ("name".equals(node.getNodeName())) {
String str = node.getTextContent();
s.setName(str);
}
if ("birth".equals(node.getNodeName())) {
String str = node.getTextContent();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
s.setBirth(sdf.parse(str));
}
}
list.add(s);
}
return list;
}
/**
* 通过递归的方法遍历所有节点及其值,其属性
* @param e
*/
public void parse2(Element e){
System.out.println("节点的名字"+e.getNodeName());
if(e.hasAttributes()){
NamedNodeMap map =e.getAttributes();
for(int i=0;i<map.getLength();i++){
Attr attr =(Attr) map.item(i);
System.out.println("属性的名字是:"+attr.getName()+"属性的值:"+attr.getValue());
}
}
NodeList nodeList =e.getChildNodes();
for(int j=0;j<nodeList.getLength();j++){
Node node = nodeList.item(j);
if(node.getNodeType()==Node.ELEMENT_NODE){
parse2((Element)node);
}
if(node.getNodeType()==Node.TEXT_NODE){
String str = node.getNodeValue().trim();
if(str!=null&&str.length()>0){
System.out.println(str);
}
}
}
}
/**
*用递归方式把xml值装载到Student对象中
*/
private List<Student> list;
private String flag;
private Student s;
public void parse3(Element el) throws ParseException {
if ("students".equals(el.getNodeName())) {
list = new ArrayList<Student>();
}
if ("student".equals(el.getNodeName())) {
s = new Student();
NamedNodeMap map = el.getAttributes();
Attr attr = (Attr) map.getNamedItem("ID");
s.setId(Long.parseLong(attr.getValue()));
list.add(s);
}
if ("name".equals(el.getNodeName())) {
flag = "name";
}
if ("birth".equals(el.getNodeName())) {
flag = "birth";
}
NodeList nodeList = el.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
parse3((Element) node);
}
if (node.getNodeType() == Node.TEXT_NODE) {
String str = node.getNodeValue().trim();
if (str != null && str.length() > 0 && "name".equals(flag))
s.setName(str);
if (str != null && str.length() > 0 && "birth".equals(flag)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
s.setBirth(sdf.parse(str));
}
}
//
}
}
public List<Student> getResult() {
return this.list;
}
}
分享到:
相关推荐
DOM解析XML文件例子DOM解析XML文件例子DOM解析XML文件例子
dom和sax解析的区别,dom的概念,sax的概念
解析javadom解析javadom解析javadom解析javadom解析
ppt中详细介绍了DOM解析器的使用及其应用
java dom解析xml <?xml version="1.0" encoding="UTF-8"?> <Head> <FileVersion>010000</FileVersion> <FileLength>00000CC3</FileLength> <FileTime>20100629173405</FileTime> <KeyIndex>1...
包括android代码实例以及个人对Dom解析xml文件的总结文档。
android为我们提供了多种解析方式,DOM解析,代码操作简单,一直为解析xml文件的一个不错的选择
java学习笔记——使用DOM解析XML和使用SAX解析XML
php dom 解析的封装,有例子 simple_html_dom
以一个实例来说明DOM解析XML文件的方法与过程。
java dom 解析 xml 实例 介绍w3c中的元素的用法,以及在解析xml过程中用到的API进行详细解释
DOM解析XML 创建XML
DOM解析可加载XML文件 对XML文件进行解析 获取结点信息 更新结点信息 及其属性等信息
用dom解析xml文件
在Java平台中如何来使用DOM解析xml文件,
XML的DOM解析方式 解析环球新闻的rss格式新闻
DOM解析XML应用实例(入门经典案例),直接在Myeclipse值导入即可运行
Android使用Dom方式解析XML,虽然xml文件太大时不建议用dom方式解析,但是如果文件比较小,也不失为一种选择。项目中xml放在assets文件夹下,view绑定使用butterknife
java中用dom解析xml的经典入门级文档
dom解析XML dom解析XML dom解析XMLdom解析XML dom解析XML