<?xml version="1.0" encoding="GB2312" ?>
<PhoneInfo>
<Brand name="华为">
<Type name="P9"/>
</Brand>
<Brand name="苹果">
<Type name="iphone5"/>
<Type name="iphone6"/>
</Brand>
</PhoneInfo>

0、整体代码

package test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; public class XmlTest { Document doc = null;// 创建一个Document对象 public static void main(String[] args) {
XmlTest xml = new XmlTest();
xml.getDocument();
xml.creatNode();
xml.changeType();
xml.showInfo();
xml.deleteNode("SAMSUNG");
xml.showInfo();
xml.saveXml("D:/xml.xml"); } /**
* 获得DOM树
*
*/
public void getDocument() {
// 1、得到DOM工厂解析器工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try {
// 2、从DOM工厂中获得Dom解析器
DocumentBuilder db = factory.newDocumentBuilder();
// 3、解析XML文件获得Document对象,即DOM树
doc = db.parse("收藏信息.xml");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* 显示xml文档信息 !
*/
public void showInfo() {
// 获取DOM树Brand节点
NodeList BrandName = doc.getElementsByTagName("Brand");
for (int i = 0; i < BrandName.getLength(); i++) {
// 获取第i个Brand元素的信息(返回i元素)
Node brand = BrandName.item(i);
// Element是Node的子类,用Element的getAttribute("属性名")获得元素属性
Element element = (Element) brand;
// 获取第i个Brand元素的name属性
String brandAttribute = element.getAttribute("name");
// 获得所有的子节点
NodeList types = element.getChildNodes();
for (int j = 0; j < types.getLength(); j++) {
Node type = types.item(j);
// 判断是否是元素节点(使用getChildNodes()就要判断)
if (type.getNodeType() == Node.ELEMENT_NODE) {
Element typeEle = (Element) type;
String typeAttribute = typeEle.getAttribute("name");
System.out.println("手机:" + brandAttribute + typeAttribute);
}
} }
} /**
* 新增节点
*
*/
public void creatNode() {
// 创建三星节点
Element brandEle = doc.createElement("Brand");
brandEle.setAttribute("name", "三星");
// 创建型号Note7节点
Element type = doc.createElement("Type");
type.setAttribute("name", "Note7");
// 把note7元素挂到三星元素上
brandEle.appendChild(type);
// 找到PhoneInfo节点
NodeList PhoneInfosNode = doc.getElementsByTagName("PhoneInfo");
for (int i = 0; i < PhoneInfosNode.getLength(); i++) {
Node PhoneInfos = PhoneInfosNode.item(i);
if (PhoneInfos.getNodeType() == Node.ELEMENT_NODE) {
// 把三星节点挂到PhoneInfo上
PhoneInfos.appendChild(brandEle);
} } }
/**
* 保存xml文档
*
* @param path 保存的路径
*/
public void saveXml(String path) {
// 1、创建转换工厂
TransformerFactory factory = TransformerFactory.newInstance(); try {
// 2、从工厂中获得转换器
Transformer Transformer = factory.newTransformer();
// 3、进行转换,如果直接转换可能出现乱码,需要进行格式设置
// 输出文件编码格式设置
Transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
// 需要DOM转换的源文件
DOMSource xmlSource = new DOMSource(doc);
// 指定目标路径
StreamResult outputTarget = new StreamResult(new FileOutputStream(
path));
// 使用transform()进行保存xml文件
Transformer.transform(xmlSource, outputTarget); } catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
/**
* 更改Brand属性
*
*/
public void changeType(){
//获得节点信息
NodeList brandElements = doc.getElementsByTagName("Brand");
//遍历节点
for (int i = 0; i < brandElements.getLength(); i++) {
Node brands = brandElements.item(i);
Element brand=(Element) brands; String brandAtt = brand.getAttribute("name");
//判断节点属性值
if(brandAtt.equals("三星")){
brand.setAttribute("name", "SAMSUNG");
}
}
}
/**
* 删除指定节点
* @param name 删除的Brand属性名
*/
public void deleteNode(String name){
NodeList brandsEle = doc.getElementsByTagName("Brand");
for (int i = 0; i < brandsEle.getLength(); i++) {
Element brand = (Element) brandsEle.item(i);
String brandAttribute = brand.getAttribute("name");
if(brandAttribute.equals(name)){
doc.getElementsByTagName("PhoneInfo").item(0).removeChild(brand);
} }
}
}

1、通过DocumentBuilderFactory 获得解析工厂,在工厂中获得解析器实例,通过解析器获得DOM树。

    /**
* 获得DOM树
*
*/
public void getDocument() {
// 1、得到DOM工厂解析器工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try {
// 2、从DOM工厂中获得Dom解析器
DocumentBuilder db = factory.newDocumentBuilder();
// 3、解析XML文件获得Document对象,即DOM树
doc = db.parse("收藏信息.xml");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

2、保存xml文件

/**
* 保存xml文档
*
* @param path 保存的路径
*/
public void saveXml(String path) {
// 1、创建转换工厂
TransformerFactory factory = TransformerFactory.newInstance(); try {
// 2、从工厂中获得转换器
Transformer Transformer = factory.newTransformer();
// 3、进行转换,如果直接转换可能出现乱码,需要进行格式设置
// 输出文件编码格式设置
Transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
// 需要DOM转换的源文件
DOMSource xmlSource = new DOMSource(doc);
// 指定目标路径
StreamResult outputTarget = new StreamResult(new FileOutputStream(
path));
// 使用transform()进行保存xml文件
Transformer.transform(xmlSource, outputTarget); } catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

3、xml文件显示到控制台

/**
* 显示xml文档信息 !
*/
public void showInfo() {
// 获取DOM树Brand节点
NodeList BrandName = doc.getElementsByTagName("Brand");
for (int i = 0; i < BrandName.getLength(); i++) {
// 获取第i个Brand元素的信息(返回i元素)
Node brand = BrandName.item(i);
// Element是Node的子类,用Element的getAttribute("属性名")获得元素属性
Element element = (Element) brand;
// 获取第i个Brand元素的name属性
String brandAttribute = element.getAttribute("name");
// 获得所有的子节点
NodeList types = element.getChildNodes();
for (int j = 0; j < types.getLength(); j++) {
Node type = types.item(j);
// 判断是否是元素节点(使用getChildNodes()就要判断)
if (type.getNodeType() == Node.ELEMENT_NODE) {
Element typeEle = (Element) type;
String typeAttribute = typeEle.getAttribute("name");
System.out.println("手机:" + brandAttribute + typeAttribute);
}
} }
}

4、添加节点Brand:三星,Type:note7

/**
* 新增节点
*
*/
public void creatNode() {
// 创建三星节点
Element brandEle = doc.createElement("Brand");
brandEle.setAttribute("name", "三星");
// 创建型号Note7节点
Element type = doc.createElement("Type");
type.setAttribute("name", "Note7");
// 把note7元素挂到三星元素上
brandEle.appendChild(type);
// 找到PhoneInfo节点
NodeList PhoneInfosNode = doc.getElementsByTagName("PhoneInfo");
for (int i = 0; i < PhoneInfosNode.getLength(); i++) {
Node PhoneInfos = PhoneInfosNode.item(i);
if (PhoneInfos.getNodeType() == Node.ELEMENT_NODE) {
// 把三星节点挂到PhoneInfo上
PhoneInfos.appendChild(brandEle);
} } }

5、修改节点属性,修改"三星"为"SAMSUNG"

/**
* 更改Brand属性
*
*/
public void changeType(){
//获得节点信息
NodeList brandElements = doc.getElementsByTagName("Brand");
//遍历节点
for (int i = 0; i < brandElements.getLength(); i++) {
Node brands = brandElements.item(i);
Element brand=(Element) brands; String brandAtt = brand.getAttribute("name");
//判断节点属性值
if(brandAtt.equals("三星")){
brand.setAttribute("name", "SAMSUNG");
}
}
}

6、删除SAMSUNG节点

/**
* 删除指定节点
* @param name 删除的Brand属性名
*/
public void deleteNode(String name){
NodeList brandsEle = doc.getElementsByTagName("Brand");
for (int i = 0; i < brandsEle.getLength(); i++) {
Element brand = (Element) brandsEle.item(i);
String brandAttribute = brand.getAttribute("name");
if(brandAttribute.equals(name)){
doc.getElementsByTagName("PhoneInfo").item(0).removeChild(brand);
} }
}

7、主方法

public static void main(String[] args) {
XmlTest xml = new XmlTest();
xml.getDocument();
xml.creatNode();
xml.changeType();
xml.showInfo();
xml.deleteNode("SAMSUNG");
xml.showInfo();
xml.saveXml("D:/xml.xml"); }

最新文章

  1. 用Unity开发HTC VIVE——手柄控制篇
  2. [转载]Using ngOptions In AngularJS
  3. CSS 加载新方式
  4. sql 随笔 2015-07-02
  5. MySQL 高可用MHA安装部署以及故障转移详细资料汇总 转
  6. ios NavBar+TarBar技巧
  7. Python基础:1.数据类型(空、布尔类型、整型、长整型、浮点型、字符串)
  8. pip 的 Assert Error
  9. Ubuntu中使用终端运行Hadoop程序
  10. loadrunner:关联操作
  11. 安装mingw编译器
  12. asp.net mvc 模型验证组件——FluentValidation
  13. 面向对象的轮播js
  14. Amoeba变形虫
  15. Android工程中javax annotation Nullable找不到的替代方案
  16. dialog弹层背景overlayer实现的方式
  17. c#及js实现将金融变成3位一逗号
  18. Python: 合并多个字典
  19. url-pattern配置
  20. Python 列表表达式与生成器表达式

热门文章

  1. jQuery全选、全不选、反选的简洁写法【实例】
  2. python实战第一天-socket模块练习
  3. Head First 设计模式 第5章 单例模式
  4. spring学习之spring 插件 for eclipse
  5. java中使用poi导出excel表格数据并且可以手动修改导出路径
  6. CSS属性定义 文本修饰 边框效果 背景修饰
  7. 排座椅 2008 NOIP 普及组 第二题
  8. 使用sed命令向文件中追加可变字符串
  9. Java入门——(2)面对对象(上)
  10. master log 与relay log的关系