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. 解决三星官方移植的内核默认是没有打开支持V4L USB devices

         在linux比较新的kernel,都标配了各类摄像头的驱动支持,不用我们自己移植驱动,只需通过make menuconfig配置内核支持我们所需的摄像头类型即可.以下是在三星官方内核中配置V ...

  2. 网络中常用的各种协议(针对TCP/IP协议组)

    网络层: ip协议->网络互连协议 用途:将多个包在网络中联系起来,传输数据包(不可靠传输),最基本功能就是寻址和分段功能,不提供端到端,路由到路由的确认,不提供重发和流量控制.是计算机网络能狗 ...

  3. Linux安装与分区解释

    Linux安装过程中最重要的就是对硬盘进行分区: Linux是先建立一个根目录“/”,然后在根目录上建立一系列的空目录,接着把硬盘分区挂载到相应目录上. 在linux系统中至少必须有两个挂载点(磁盘分 ...

  4. 【学习笔记】jQuery的基础学习

    [学习笔记]jQuery的基础学习 新建 模板 小书匠  什么是jQuery对象? jQuery 对象就是通过jQuery包装DOM对象后产生的对象.jQuery 对象是 jQuery 独有的. 如果 ...

  5. Helvetic Coding Contest 2016 online mirror A1

    Description Tonight is brain dinner night and all zombies will gather together to scarf down some de ...

  6. redis 集合

    > SADD myset1 a b c (integer) > SADD web maiziedu.com (integer) > SADD web maiziedu.com (in ...

  7. 查询linux服务器有哪些IP在连接

    查询linux服务器有哪些IP在连接 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 查看linux的 ...

  8. Observable Flowable Test

    package com.test.rxjava; import java.time.Duration; import java.time.Instant; import java.util.Linke ...

  9. CROSS APPLY和 OUTER APPLY 区别详解

    SQL Server 2005 新增 cross apply 和 outer apply 联接语句,增加这两个东东有啥作用呢? 我们知道有个 SQL Server 2000 中有个 cross joi ...

  10. shell脚本启动java程序

    #!/bin/bash ### 切换到工作目录 bin=$(cd `dirname ${0}`;pwd) cd ${bin} echo "bin [${bin}] .." ### ...