使用document解析xml文件
在慕课上课时,看到可以使用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文件相关推荐
- 最简单的Document解析xml文件
解析项目中的person.xml文件 Java代码块 package com.test1;import org.w3c.dom.Document; import org.w3c.dom.Node; i ...
- 服务器解析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 ...
- Java--Dom解析XML文件
之前写过几篇关于Java中解析XML文件的方法,不过,感觉不够简单,今天重写了一遍代码,用到的是方法是Dom,其中加入了日志记录功能--Log4j. 好了,不多说了,先把XMl ...
- Dom方法,解析XML文件
Dom方法,解析XML文件的基本操作 1 package com.demo.xml.jaxp; 2 3 import java.io.IOException; 4 5 import javax.xml ...
- JavaXml教程(二)使用DOM方式解析XML文件
DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...
- java解析xml文档_Java解析xml文件
读xml文件: xml文件内容: Java Eclipse Swift Xcode C# Visual Studio 代码: package XMLParse; import java.io.File ...
- java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...
网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...
- 使用dom4j解析XML文件
为什么80%的码农都做不了架构师?>>> dom4j是一个java 的XML API,用来读写XML文件. 使用dom4j解析XML文件,首先需要在官网下载dom4j-1.6. ...
- python 解析xml 文件: SAX方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
最新文章
- Android 金钱计算BigDecimal 的使用
- BFS:南土所梁玉婷组综述促进土壤植物生态系统健康的微生物共存理论
- 【转】UNITY之LUA加密
- POJ2527(两多项式取余)
- leetcode剑指 Offer 47. 礼物的最大价值(动态规划)
- Python学习17 Turtle库绘图
- 为什么大学感觉学编程很难?原因有这三点。
- unix和linux命令_Linux vs. Unix,在命令行中清理数据,为儿童准备的15本书,以及更多必读内容
- NextArch Foundation 下一代架构基金会
- 模二运算,模二加减乘除
- js-合并两个有序数组
- QQ占用F2快捷键问题
- 基于图像的场景三维建模
- 幸福三月丨盐城北大青鸟女神节快乐!
- 安装Robo 3T(Robomongo)MongoDB可视化工具
- VB:SysInfo控件
- VBA常用小代码:在批注中批量插入图片
- (一)、centos7系统搭建Ethereum
- 怎么开发一款应用程序?
- 【题解】吉首大学第六届新星杯暨程序设计大赛(新生网络同步赛).2016