html不需要编译就可以直接运行,JavaSE XML操作,javasexml操作

JavaSE XML操作,javasexml操作

XML操作

HTML与XML区别

Html:超文本标记语言,属于解析型语言,不需要编译就可以运行,浏览器可以直接解析,一个网页从服务器到浏览器就是通过发送Html文件格式,采用标签来存储数据,作用是用来展示数据,不区分大小写

XML:可扩展性标记语言,用于存储数据,XML文件格式非常有利于计算机之间的数据传送,区分大小写,由开始标签和结束标签构成,有且只有一个根节点

DTD

文档类型的定义,用于约束XML,内容包括,元素定义规则,属性定义规则,元素之间的关系

?:0-1次子元素

*:0-N次子元素

+:1-N次子元素

DOM解析

dom:Document Object Model 文档对象模型

主要对象

1.      Document:表示整个XML文档

[1]    getElementByTagName(String),

[2]    getDocumentElement()//得到根节点

2.      NodeList:表示XML文档节点集合

[1]    item(index)

3.      Node:表示XML文档节点

[1]    getChildNodes()

[2]    getNodeName()

[3]    getNodeValue()

[4]    getTextContent()

4.      Element:表示文档元素,与node对等

[1]    getAttribute(attr_name:String)

解析过程:

DOM加载xml

static {

// 1.创建解析器工厂

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

// 2.根据解析器工厂获得解析器对象

DocumentBuilder builder;

try {

builder = factory.newDocumentBuilder();

//加载XML文档

document = builder.parse(path);

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

DOM查询public void show() {

//Element root = document.getDocumentElement();//取出根节点

NodeList list = document.getElementsByTagName("student");//取出所有的student标签

System.out.println("node sum : " + list.getLength());

System.out.println("===================================");

for(int i=0; i

Node node = list.item(i);

//取节点的属性必须转换为Element对象

Element element = (Element)node;

System.out.println("id = " + element.getAttribute("id"));

for(Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) {

if(n.getNodeType() == Node.ELEMENT_NODE) {

if(!n.getNodeName().equals("scores")) {

System.out.println(n.getNodeName() + " = " + n.getFirstChild().getTextContent());

} else {

System.out.println(n.getNodeName() + " :");

int flag = 1;

for(Node cn = n.getFirstChild(); cn != null; cn = cn.getNextSibling() ) {

if(cn.getNodeType() == Node.ELEMENT_NODE) {

System.out.println("\t" + cn.getNodeName() + "_" + (flag++) + " = " + cn.getTextContent());

}

}

}

}

}

System.out.println("===================================");

}

}

DOM保存节点

//保存 dom 到 xml 文档,问题:不会保存 dtd 约束

public void save() {

TransformerFactory factory = TransformerFactory.newInstance();

try {

Transformer transformer = factory.newTransformer();

DOMSource source = new DOMSource(document);

StreamResult result = new StreamResult(path);

transformer.transform(source, result);

} catch (TransformerConfigurationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (TransformerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

DOM添加

//向 xml文件添加一个节点

public void add() {

String name = "赵珊珊";

String id = "1004";

String sex = "女";

String age = "20";

String phone = "15874862470";

// 创建 student 节点

Element element = document.createElement("student");

// 创建 id 属性并赋值

Attr idAttr = document.createAttribute("id");

idAttr.setValue(id);

//把 id 属性加入到 student 节点中

element.setAttributeNode(idAttr);

//创建 name 子节点

Element nameEle = document.createElement("name");

nameEle.setTextContent(name);

element.appendChild(nameEle);

//创建 sex 子节点

Element sexEle = document.createElement("sex");

sexEle.setTextContent(sex);

element.appendChild(sexEle);

//创建 age 子节点

Element ageEle = document.createElement("age");

ageEle.setTextContent(age);

element.appendChild(ageEle);

//创建 phone 子节点

Element phoneEle = document.createElement("phone");

phoneEle.setTextContent(phone);

element.appendChild(phoneEle);

//把 student 节点加入到根节点的子节点中

document.getDocumentElement().appendChild(element);

//保存 dom 到 xml 文件中

save();

}

DOM删除

public void delete() {

String id = "1004";

//取所有的 Student 节点集合

NodeList list = document.getElementsByTagName("student");

//循环每一个 student 节点

for(int i = 0; i < list.getLength(); i++) {

Node n = list.item(i);

Element e = (Element) n;

//取得节点的 id 值

String idStr = e.getAttribute("id");

//如果当前节点 id 与要删除的接的的 id 匹配

if(idStr.equals(id)) {

//用当前节点的父节点来移除子节点

n.getParentNode().removeChild(n);

break;

}

}

//更新文档

save();

}

DOM修改

public void update() {

String id = "1004";

//取所有的 Student 节点集合

NodeList list = document.getElementsByTagName("student");

//循环每一个 student 节点

for(int i = 0; i < list.getLength(); i++) {

Node n = list.item(i);

Element e = (Element) n;

//取得节点的 id 值

String idStr = e.getAttribute("id");

//如果当前节点 id 与要删除的接的的 id 匹配

if(idStr.equals(id)) {

//用当前节点的父节点来移除子节点

for(Node cn = n.getFirstChild(); cn != null; cn = cn.getNextSibling() ) {

if(cn.getNodeType() == Node.ELEMENT_NODE) {

if(cn.getNodeName().equals("name")) {

cn.setTextContent("另一个人");

}

}

}

break;

}

}

//更新文档

save();

}

DOM4J解析

package com.etc.homework.dom4j;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.List;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

public class StudentManage {

static Document document;

static String path = "test/xml/student.xml";

static {

SAXReader reader = new SAXReader();

try {

document = reader.read(new File(path));

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@SuppressWarnings("unchecked")

public void show() {

//通过 document 对象获取根节点

Element root = document.getRootElement();

//通过 elements() 方法获取当前节点的所有子节点

List list = root.elements();

//遍历子节点集合,

for(Element student : list) {

//获得叫 id 的属性并取得属性值,输出

System.out.println("id : " + student.attribute("id").getValue());

List elements = student.elements();

//遍历 student 节点下的所有子节点

for (Element el : elements) {

//如果是 scores 节点,则继续深度搜索,否则输出节点名和节点值

if(el.getName().equals("scores")) {

List scores = el.elements();

System.out.print( el.getName() +" : " );

for(Element score : scores) {

System.out.print( " " +score.getTextTrim() );

}

System.out.println();

} else System.out.println( el.getName() +" : "+el.getTextTrim() );

}

System.out.println();

}

}

public void add(Student stu) {

//获取根元素并为根元素创建一个子元素

Element root = document.getRootElement();

Element student = root.addElement("student");

//给子元素设置属性 id, 值为 1004

student.addAttribute("id", stu.getId());

//给 student 子元素添加子元素并添加文本

Element el = student.addElement("name");

el.setText(stu.getName());

student.addElement("sex").setText(stu.getSex());

student.addElement("age").setText(stu.getAge());

student.addElement("phone").setText(stu.getPhone());

//保存

save();

}

@SuppressWarnings("unchecked")

public void update(Student stu) {

//获取根元素并为根元素创建一个子元素

Element root = document.getRootElement();

//得到根元素的所有子节点

List list = root.elements();

//遍历子元素集合

for(Element student : list) {

//如果当前元素节点的id属性的值与要修改的id的值一致

if(student.attribute("id").getValue().equals(stu.getId())) {

//得到该元素下的所有子元素节点

List params = student.elements();

//遍历子元素节点并按对应位置修改值

for(Element param : params) {

String type = param.getName();

if(type.equals("name")) {

param.setText(stu.getName());

} else if(type.equals("sex")) {

param.setText(stu.getSex());

} else if(type.equals("age")) {

param.setText(stu.getAge());

} else if(type.equals("phone")) {

param.setText(stu.getPhone());

}

}

}

}

//保存dom到xml

save();

}

@SuppressWarnings("unchecked")

public void delete(String id) {

//获取根元素并为根元素创建一个子元素

Element root = document.getRootElement();

//根据根元素获取子元素节点集合

List list = root.elements();

//遍历集合并找到与要删除的元素节点id一致的节点

for(Element student : list) {

if(student.attribute("id").getValue().equals(id)) {

//通过该节点的父节点元素删除该节点元素

student.getParent().remove(student);

}

}

//保存dom到xml

save();

}

private void save() {

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("UTF-8");//指定保存的XML文件编码

XMLWriter writer = null;

try {

writer = new XMLWriter(new FileOutputStream(path), format);

writer.write(document);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

相关文章暂无相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值