加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析----JDom解析XML

发布时间:2020-12-16 06:25:53 所属栏目:百科 来源:网络整理
导读:目前,比较流行的解析XML的技术有,JDOM、DOM4J、XQUERY等。本篇文档,主要是使用JDOM来实现对XML文档的解析。 首先,要进行JDOM解析,必须先在项目中导入相关的jar包: 1、导入jar包 2、创建XML文件 3、对xml文件进行解析和更新 贴出代码为: package com.j

目前,比较流行的解析XML的技术有,JDOM、DOM4J、XQUERY等。本篇文档,主要是使用JDOM来实现对XML文档的解析。

首先,要进行JDOM解析,必须先在项目中导入相关的jar包:

1、导入jar包

2、创建XML文件

3、对xml文件进行解析和更新

贴出代码为:

package com.jjyy.jdom.parse;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.junit.Before;
import org.junit.Test;

/**
 * Jdom解析xml
 * 
 * @author JiangYu
 * 
 */
public class JDomParseDemo {

	private String name;

	@Before
	public void getLocation() {
		name = System.getProperty("user.dir") + "srccomputer.xml";
	}

	@Test
	public void testCreate() {
		createXML(name);
	}

	@Test
	public void testParserAndUpdate() {
		parserAndUpdate(name);
	}

	/**
	 * 创建xml文件
	 */
	public static void createXML(String name) {
		try {
			// 创建节点
			Element rootElement = new Element("computer");
			Element priceElement = new Element("price");
			priceElement.setText("5000");
			// 设置属性
			priceElement.setAttribute("way","$");

			Element hardwareEle = new Element("hardware");
			Element screenElem = new Element("screen");
			screenElem.setText("samsung");
			hardwareEle.addContent(screenElem);

			// 为父节点添加子元素
			rootElement.addContent(priceElement);
			rootElement.addContent(hardwareEle);
			// 根据节点创建Document
			Document document = new Document(rootElement);
			// 将文档写出到硬盘
			// 创建输出格式 pretty适合阅读 compact适合传输
			Format format = Format.getPrettyFormat();
			format.setEncoding("utf-8");
			// 创建输出对象
			// 创建输出对象
			XMLOutputter xmlOutputter = new XMLOutputter(format);
			// 写出
			xmlOutputter.output(document,new FileOutputStream(name));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 解析并修改文档
	 * 
	 * @param name
	 * @throws JDOMException
	 * @throws IOException
	 */
	public static void parserAndUpdate(String name) {
		try {
			// 创建JDOm的解析器
			SAXBuilder saxBuilder = new SAXBuilder();
			// 创建文档对象模型
			InputStream is = new FileInputStream(name);
			Document document = saxBuilder.build(is);
			// 获取根节点
			Element rootElement = document.getRootElement();
			// 获取指定的子节点
			Element priceElement = rootElement.getChild("price");
			// 获取节点的文本内容
			System.out.println(priceElement.getText());
			System.out.println(priceElement.getAttributeValue("way"));
			// 获取screen
			Element screenEle = rootElement.getChild("hardware").getChild("screen");
			System.out.println(screenEle.getText());

			// 不常用
			List<Element> list = rootElement.getChildren();
			System.out.println(list.size());

			rootElement.getContent();// 不需要去看 了解下就型了
			/** ************修改获取到的节点的信息*******都是在内存中修改的********* */
			// 修改属性信息
			priceElement.setAttribute("way","RMB");
			// 新增一个属性
			Attribute abcdAttr = new Attribute("real","yes");
			priceElement.setAttribute(abcdAttr);
			// 添加一个节点
			Element softwareElement = new Element("software");
			softwareElement.setText("softWare");
			rootElement.addContent(softwareElement);
			// 添加文本节点(当本节点已经存在别的节点,如果在使用setText会将以前的覆盖掉)
			// rootElement.addContent("你是一个坏人");
			/** ******************将内存中的信息写会硬盘********************** */
			// 创建输出的格式 pretty适合阅读 compact适合传输
			Format format = Format.getPrettyFormat();
			format.setEncoding("utf-8");
			// 创建输出对象
			XMLOutputter xmlOutputter = new XMLOutputter(format);
			// 写出
			xmlOutputter.output(document,new FileOutputStream(name));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读