在慕课上课时,看到可以使用document来解析xml文件,把上课的代码放出来,先记录一下。

大概步骤如下:

1.使用DocumentBuilderFactory 创建对象后再创建DocumentBuilder对象,再根据DocumentBuilder对象创建Document得对象并导入需要解析的xml文件
2.通过document.getChildNodes() 获取一级节点对象NodeList对象
3.然后遍历获取2级节点对象,然后继续遍历
4.得到最后得文本对象时,就可以输出文本名称和值了

xml文件(共三个节点)如下:

<?xml version="1.0" encoding="UTF-8"?>
<users><user id="0"><name>Mary</name><age>23</age><sex>Female</sex></user><user id="1"><name>Mike</name><age>24</age><sex>Male</sex></user><user id="2"><name>Alice</name><age>23</age><sex>Female</sex></user><user id="3"><name>Tom</name><age>24</age><sex>Male</sex></user>
</users>
package xml.dom;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;public class DomReader
{public static void main(String[] a){recursiveTraverse(); //自上而下进行访问System.out.println("========华丽丽的分割线==========");traverseBySearch();    //根据名称进行搜索       }public static void recursiveTraverse(){try {//采用Dom解析xml文件DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse("users.xml");//获取所有的一级子节点NodeList usersList = document.getChildNodes();System.out.println(usersList.getLength());  //1  for (int i = 0; i < usersList.getLength(); i++) {Node users = usersList.item(i);         //1  users NodeList userList = users.getChildNodes(); //获取二级子节点user的列表System.out.println("==" + userList.getLength()); //9for (int j = 0; j < userList.getLength(); j++) //9{Node user = userList.item(j);if (user.getNodeType() == Node.ELEMENT_NODE){NodeList metaList = user.getChildNodes();System.out.println("====" + metaList.getLength()); //7for (int k = 0; k < metaList.getLength(); k++) //7{//到最后一级文本Node meta = metaList.item(k);if (meta.getNodeType() == Node.ELEMENT_NODE){System.out.println(metaList.item(k).getNodeName() + ":" + metaList.item(k).getTextContent());}                                                              }                    System.out.println();}                   }}            } catch (Exception e) {e.printStackTrace();} }   public static void traverseBySearch(){try {//采用Dom解析xml文件DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();Document document = db.parse("users.xml");Element rootElement = document.getDocumentElement();         NodeList nodeList = rootElement.getElementsByTagName("name"); if(nodeList != null) { for (int i = 0 ; i < nodeList.getLength(); i++) { Element element = (Element)nodeList.item(i);                  System.out.println(element.getNodeName() + " = " + element.getTextContent());} }             } catch (Exception e) {e.printStackTrace();}     }
}
  • 然后写使用document来写xml文件步骤也是差不多,多使用了一个transform得jar包,给出代码如下:
package xml.dom;import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;
import org.w3c.dom.Element;public class DomWriter {public static void main(String[] args) {try {DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//新创建一个Document节点Document document = dbBuilder.newDocument();if (document != null) {Element docx = document.createElement("document");    //都是采用Document创建元素      Element element = document.createElement("element");element.setAttribute("type", "paragraph"); element.setAttribute("alignment", "left"); //element增加2个属性Element object = document.createElement("object");object.setAttribute("type", "text");Element text = document.createElement("text");text.appendChild(document.createTextNode("abcdefg")); //给text节点赋值Element bold = document.createElement("bold");bold.appendChild(document.createTextNode("true"));    //给bold节点赋值object.appendChild(text);      //把text节点挂在object下object.appendChild(bold);      //把bold节点挂在object下element.appendChild(object);   //把object节点挂在element下docx.appendChild(element);      //把element节点挂在docx下      document.appendChild(docx);    //把docx挂在document下TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();DOMSource source = new DOMSource(document);//定义目标文件File file = new File("dom_result.xml");StreamResult result = new StreamResult(file);//将xml内容写入到文件中transformer.transform(source, result);System.out.println("write xml file successfully");}} catch (Exception e) {e.printStackTrace();}     }
}

共勉!

使用document解析xml文件相关推荐

  1. 最简单的Document解析xml文件

    解析项目中的person.xml文件 Java代码块 package com.test1;import org.w3c.dom.Document; import org.w3c.dom.Node; i ...

  2. 服务器解析xml文件报错:org.dom4j.DocumentException: Error on line -1 of document

    服务器解析xml文件报错:org.dom4j.DocumentException: Error on line -1 of document  : Premature end of file. Nes ...

  3. Java--Dom解析XML文件

          之前写过几篇关于Java中解析XML文件的方法,不过,感觉不够简单,今天重写了一遍代码,用到的是方法是Dom,其中加入了日志记录功能--Log4j.       好了,不多说了,先把XMl ...

  4. Dom方法,解析XML文件

    Dom方法,解析XML文件的基本操作 1 package com.demo.xml.jaxp; 2 3 import java.io.IOException; 4 5 import javax.xml ...

  5. JavaXml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

  6. java解析xml文档_Java解析xml文件

    读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...

  7. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  8. 使用dom4j解析XML文件

    为什么80%的码农都做不了架构师?>>>    dom4j是一个java 的XML API,用来读写XML文件. 使用dom4j解析XML文件,首先需要在官网下载dom4j-1.6. ...

  9. python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

最新文章

  1. Android 金钱计算BigDecimal 的使用
  2. BFS:南土所梁玉婷组综述促进土壤植物生态系统健康的微生物共存理论
  3. 【转】UNITY之LUA加密
  4. POJ2527(两多项式取余)
  5. leetcode剑指 Offer 47. 礼物的最大价值(动态规划)
  6. Python学习17 Turtle库绘图
  7. 为什么大学感觉学编程很难?原因有这三点。
  8. unix和linux命令_Linux vs. Unix,在命令行中清理数据,为儿童准备的15本书,以及更多必读内容
  9. NextArch Foundation 下一代架构基金会
  10. 模二运算,模二加减乘除
  11. js-合并两个有序数组
  12. QQ占用F2快捷键问题
  13. 基于图像的场景三维建模
  14. 幸福三月丨盐城北大青鸟女神节快乐!
  15. 安装Robo 3T(Robomongo)MongoDB可视化工具
  16. VB:SysInfo控件
  17. VBA常用小代码:在批注中批量插入图片
  18. (一)、centos7系统搭建Ethereum
  19. 怎么开发一款应用程序?
  20. 【题解】吉首大学第六届新星杯暨程序设计大赛(新生网络同步赛).2016

热门文章

  1. CART算法对比理解
  2. 关于Java的位移运算
  3. I tell you 如何下载文件
  4. 【Matlab仿真模型】短时交通流量预测模型
  5. 小米6无人直播详细教程+工具包
  6. 在linux系统下暴力破解WiFi密码
  7. 系统集成项目管理工程师(软考中级)—— 第十七章 项目沟通和干系人管理 笔记分享
  8. 牙齿底部粉色原因-ECR(External cervical resorption)
  9. 关于ARM的内核架构
  10. Modelsim的使用方法