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. 关于cuda拷贝的速度测试

    由于没有使用profiler,仅仅通过简单的传输函数测试,如下测试了10000个点,1000000个点,100000000个点的速度: 均按时钟周期来计时,通过MAX调整数据 int main(){ ...

  2. CentOS下安装配置SVN服务器并自动同步到web目录

    一.安装 yum install subversion测试是否安装成功 /usr/bin/svnserve --version如提示以下内容,说明已安装成功 svnserve,版本 1.6.11 (r ...

  3. 数据结构11: 栈(Stack)的概念和应用及C语言实现

    栈,线性表的一种特殊的存储结构.与学习过的线性表的不同之处在于栈只能从表的固定一端对数据进行插入和删除操作,另一端是封死的. 图1 栈结构示意图 由于栈只有一边开口存取数据,称开口的那一端为“栈顶”, ...

  4. join与os.path.join

    Python中有join和os.path.join()两个函数,具体作用如下: join:连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.joi ...

  5. C++的一种业务分发方案(另类的工厂模式)

    在C++中,传统的业务分发.总要写一大串的switch-case,并且每次添加新业务时.都要在原有的switch-case里加一个分支,这就违反了设计模式中的开放封闭原则. 下面这样的方案,就全然去除 ...

  6. JTAG与JLink说明

    JTAG接口解读 通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题:一类用于Debug:一般支持JTAG的CPU内都包含了这两个模块. 一个含有JTAG Debug接口模块 ...

  7. visual studio检查运算上溢/下溢的开关位置

    [注意] 勾选这个选项会对应用程序的整体性能造成一些影响,但是会更加安全.具体情况根据项目需求来决定.

  8. Codeforces Round #532 (Div. 2)- A(思维)

    This morning, Roman woke up and opened the browser with nn opened tabs numbered from 11 to nn. There ...

  9. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 I

    链接:https://www.nowcoder.com/acm/contest/122/I来源:牛客网 题目描述 小q最近在做一个项目,其中涉及到了一个计时器的使用,但是笨笨的小q却犯难了,他想请你帮 ...

  10. newCachedThreadPool无上限线程池使用

    1. newCachedThreadPool无上限线程池,   动态根据代码添加线程,   如果线程空闲60秒没有被使用,会自动关闭 package ThreadTest; import java.u ...