package lianxi;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
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;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Demo {
private static Document docu;
public static void main(String[] args) throws Exception {
read();
//add();
delete();
show();
save();

}
private static void read() throws Exception {
//创建DocumentBuilderFactor,工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.解析器工厂对象创建解析器对象
DocumentBuilder builder=factory.newDocumentBuilder();
//添加
docu =builder.parse("src/na.xml");
}
private static void show(){
//遍历节点
NodeList brad=docu.getElementsByTagName("学生");
for(int i=0;i<brad.getLength();i++){
Node nod=(Node)brad.item(i);
//把节点转化为元素节点
Element ele=(Element)nod;
String str=ele.getTagName();
NodeList types=ele.getChildNodes();//查询下面的子节点
for(int j=0;j<types.getLength();j++){
Node node=(Node)types.item(j);
if(node.getNodeType()==Node.ELEMENT_NODE){
Element elemen=(Element)node;
String str1=elemen.getTextContent();
System.out.println(elemen.getNodeName()+str1);
}
}

}
}
private static void save() throws Exception{
//保存xml借助转化器
TransformerFactory factory=TransformerFactory.newInstance();
//indent-number表示缩进的位置
factory.setAttribute("indent-number", 4);
//转换器得到对象
Transformer former=factory.newTransformer();
//这里设置一下Outputkeys的关键字
former.setOutputProperty(OutputKeys.INDENT,"YES");
DOMSource source=new DOMSource(docu);//这个需要传入一个xml文件
//new OutputStreamWriter(out,utf-8);
StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream("src/na.xml"),"utf-8"));
//调用其中一个方法transform(source,result)
former.transform(source, result);

}

private static void add() throws Exception{
Element element=docu.createElement("学生");
//可以使用getAttribute来添加一个属性
element.setAttribute("年级","大四");
docu.getElementsByTagName("班级").item(0).appendChild(element);
save();
}
private static void delete() throws Exception{
NodeList brands=docu.getElementsByTagName("学生");//找到标志
//for(int i=0;i<brands.getLength();i++){
Node brand=brands.item(1);
//节点转化为元素节点
Element ele=(Element)brand;
//if(ele.getAttribute("name").equals("小米9")){
//它自己没有权力删除自己,所有先找到父节点,通过父节点来删除
ele.getParentNode().removeChild(ele);
//}
// }
//save();
}
}

package cn.xml;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
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.Node;
import org.w3c.dom.NodeList;

public class Xmlfactor {
private Document dd=null;
public static void main(String[] args) {
Xmlfactor ss=new Xmlfactor();
try {
ss.GetDocument();
//ss.add();
ss.delete();
ss.show();
//ss.update();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
private void GetDocument() throws Exception{
DocumentBuilderFactory doc= DocumentBuilderFactory.newInstance();
DocumentBuilder builder=doc.newDocumentBuilder();
dd=builder.parse("First.xml");
}
private void show(){
//获取节点集合 getElementsByTagname
NodeList brand=dd.getElementsByTagName("size");
for(int i=0;i<brand.getLength();i++){
Node node=brand.item(i);//类似于数组,使用item遍历
// System.out.println(node);
//从节点准换为具体的元素点
Element elebrand=(Element)node;
String attr=elebrand.getAttribute("aa");//遍历元素点的内容
NodeList types=elebrand.getChildNodes();
System.out.println(attr);

//接下来要查找brand元素节点里的子节点: getChildNodes():
for(int j=0;j<types.getLength();j++){
Node typenode=types.item(j);
//判断是元素节点,因为可能是其他节点
if(typenode.getNodeType()==Node.ELEMENT_NODE){
//把节点转化为元素节点
Element eleType=(Element)typenode;
String type=eleType.getAttribute("name");
System.out.println(attr+type);
}
}
}

}
private void save() throws Exception{
//保存xml,需要借助转换器
TransformerFactory factor=TransformerFactory.newInstance();
//indent-number表示缩进的位置
factor.setAttribute("indent-number", 4);
//转换器工工厂得到准换器对象
Transformer tran=factor.newTransformer();
//这里设置一下Outputkeys的关键字
tran.setOutputProperty(OutputKeys.INDENT, "YES");
//调用其中一个方法transform(source,result)
DOMSource souce=new DOMSource(dd);
//new OutputStreamWriter(out,utf-8);
StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream("First.xml"),"utf-8"));
tran.transform(souce, result);

}
private void add() throws Exception{
//创建一个元素集createElement
Element element=dd.createElement("size");
//给brand设置一个属性 setAttribute
element.setAttribute("aa", "asdasd");
//创建一个元素<Size tt="sdf">
//将eleme作为Element的子元素
Element ele1=dd.createElement("Type");
ele1.setAttribute("name", "小米9");
element.appendChild(ele1);
//将新建的元素放进根目录中
dd.getElementsByTagName("cloth").item(1).appendChild(element);
save();
}
//添加一个属性id
private void update() throws Exception{
//首先获取指定标志
NodeList brands=dd.getElementsByTagName("size");
//遍历
for(int i=0;i<brands.getLength();i++){
//得到每一个元素点
Node brand=brands.item(i);
//把节点转化为元素节点
Element ele=(Element)brand;
ele.setAttribute("id",i+"");
}
save();
}
private void delete() throws Exception{
NodeList brands=dd.getElementsByTagName("Type");//找到标志
for(int i=0;i<brands.getLength();i++){
Node brand=brands.item(i);
//节点转化为元素节点
Element ele=(Element)brand;
if(ele.getAttribute("name").equals("小米9")){
//它自己没有权力删除自己,所有先找到父节点,通过父节点来删除
ele.getParentNode().removeChild(ele);
}
}
save();
}

}

xml解析demo使用的更多相关文章

  1. jQuery ajax解析xml文件demo

    解析xml文件,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息. 前端代码: <!doctype html> <html> <hea ...

  2. 非常简单的XML解析(SAX解析、pull解析)

    这里只是把解析的数据当日志打出来了 非常简单的xml解析方式 package com.example.demo.service; import java.io.IOException; import ...

  3. IOS开发之路三(XML解析之KissXML的使用)

    最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...

  4. IOS开发之路三(XML解析之GDataXML的使用)

    最近再做一个项目需要用到xml的解析.今天查了一些资料自己做了一个小demo.纯OC没有界面.. 在IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用 ...

  5. Android] Android XML解析学习——方式比较

     [Android] Android XML解析学习——方式比较 (ZT)  分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/deta ...

  6. XML解析之SAX

    今天在敲代码的时候,想要实现地址选择功能,就是那个能够选择省.市.县的一个,用到的一个开源框架Android-PickerView,当然他这个里面尽管实现了能够选择的城市列表.可是他这是自己创建的,可 ...

  7. Json和XML解析

    NSXMLParse 关于XML,有两种解析方式,分别是SAX(Simple API for XML,基于事件驱动的解析方式,逐行解析数据,采用协议回调机制)和DOM(Document Object ...

  8. Android中XML解析-SAX解析

    昨天由于时间比较匆忙只写了Android中的XML解析的Dom方式,这种方式比较方便,很容易理解,最大的不足就是内容多的时候,会消耗内存.SAX(Simple API for XML)是一个解析速度快 ...

  9. Android 数据存储(XML解析)

      在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据 ...

随机推荐

  1. 加快 hive 查询的 5 种方法

    1. 使用 Tez set hive.execution.engine=tez; 2. 使用 ORCFILE.当有多个表 join 时,使用 ORCFile 进行存储,会显著地提高速度. CREATE ...

  2. 项目管理之码云和git

    目录 学习链接 1 码云 1 第一步,注册 2 第二部,登录 2 创建项目 2 git管理 4 如何生成公钥 5 clone项目 5 提交项目 6 1.本地初始化一个项目 6 2.开始第一次上传你的项 ...

  3. linux heap堆分配

    heap堆分配在用户层面:malloc函数用于heap内存分配 void* malloc(size_t size); 进程的虚拟内存地址布局: 对用户来说,主要关注的空间是User Space.将Us ...

  4. CSS3中的vh、vw及其应用场景

    需求:我们项目的需求是 一.vh   vw vw和vh是相对于视口(viewport)的宽度和高度.由于现在移动设备的屏幕尺寸之差别,如果仍然根据屏幕的物理分辨率来设计网页,效果很难统一,因此html ...

  5. AngularJS中【Error: [$rootScope:inprog]】的解决办法

    AngularJs脏数据检查冲突 Error: [$rootScope:inprog] http://errors.angularjs.org/1.5.8/$rootScope/inprog?p0=% ...

  6. IOS 11 永不升级方法

    解决一直跳苹果升级提示终极解决方法:安装方法很简单,1:进设置-通用-存储空间与iCloud用量-管理储存空间.选择ios xxx 点击他,点删除[如果没有就略过]2:点击:https://oldca ...

  7. 匿名类与lambda区别

    第一种是继承Thread, 重写了Thread.run()    getClass()返回的是匿名类 java.long.Thread$1 第二种是lambda, 重写了Runnable.run()  ...

  8. Java字符串拆分和字符串连接

    Java字符串拆分/连接 public class LierString{ //------------------------------------------------------------ ...

  9. 问题:eclipse中线程编程编译报错,undefined reference to 'pthread_create'的解决方法(已解决)

    问题描述: 在Ubuntu系统中,使用eclipse CDT集成开发环境编写pthread程序,编译时,pthread_create不通过,报错信息是: undefined reference to ...

  10. from表单,图片预览,和表单提交

    <form> <input id="file" class="topsub-file" type="file" name= ...