xml和xml解析

1.简介XML

XML 可扩展标记语言,传输数据

HTML超文本标记语言,显示数据

 

XML 文档声明  只能放在第一行,注释不能放在声明之前

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>  standalone表示文档是否依赖其他文档。

XML元素:xml标签,必须有且仅有一个根标签,元素中的属性不能重复,属性名称可以当做子标签去定义

  

    

xml中不会忽略主体内容出现的空格和换行
//从元素集合内找到第一个子元素
Element name = (Element)linkman.getFirstChild();

 

 特殊字符

 

 

CDATA区  解析器不会对CDATA区中的内容进行解析,直接原样输出。

  <![CDATA[数据内容]]>

  

2.XML约束    dtd 约束与 schema约束

 约束的好处:可以去规范我们的xml标签(根据自己的要求)可以在工具上有相应的提示;

  dtd与schema的区别:

     dtd没有人约束它,容易写错,功能简单;

          Schema:Schema本身是xml文件,有相应的标签约束它,功能更加强大;

  

3.DOM模型(文档对象模型)  

对象:

 

Document(文档),Element(标签元素),Text(文本对象), Attribute(属性对象)

 

一切皆节点,所有的对象都是Node对象,所以对象之间都是有关系的;

我们使用反射的开端是得到class,而对于XML的解析,一切的开始都要找到document对象;

 

4.原生API解析XML       使用Java提供的API去解析XML  -----    JAXP  (Java   API  for XML)

 

解析XML--其实就是对XML进行增删改查,  它将xml文档中的所有内容读取出来,然后进行封装并放在内存里面..

我们去拿它,去修改他都是去操作的内存中的数据;使用TransFormer类 把 内存中的数据 同步到xml里面去

 

xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE contacts SYSTEM "contacts.dtd">
<contacts><linkman><name>gg</name><email>gg@itsource.cn</email><address>成都</address><group>源代码教育</group></linkman><linkman><name>mm</name><email>lanyotech@qq.com</email><address>成都</address><group>源代码教育</group></linkman>
</contacts>

 

  

package TestJAXP;import java.io.File;
import java.io.IOException;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;public class TestJAXP {/*取出第二个联系人的名字*/@Testpublic void select() throws SAXException, IOException, ParserConfigurationException {File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 获得dom 对象,并拿到根元素Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.通过标签名拿到根节点的该多个子元素,并拿到第二个linkman.NodeList linkmans = root.getElementsByTagName("linkman");Element  linkman2 = (Element) linkmans.item(1);//3.拿到第二联系人所有name元素NodeList names = linkman2.getElementsByTagName("name");Element name =  (Element) names.item(0);  //(效果一样) Node name =  names.item(0);//5.拿到name中的文本值String nameText = name.getTextContent();System.out.println(nameText);}/*增加一个联系人信息*/@Testpublic void add() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 获得dom 对象,并拿到根元素。Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.创建一个linkman子元素,并将其放入根节点中。Element linkman = dom.createElement("linkman");root.appendChild(linkman);//3.为创建的标签添加元素Element name  = dom.createElement("name");name.setTextContent("李四");linkman.appendChild(name);Element email  = dom.createElement("email");email.setTextContent("11@163.com");linkman.appendChild(email);Element adress  = dom.createElement("adress");adress.setTextContent("北京");linkman.appendChild(adress);Element group  = dom.createElement("group");group.setTextContent("中国");linkman.appendChild(group);//4. 对内存中修改的数据,同步到磁盘的XML文件中//获取Transformer转换器对象,得先拿到同步的对象工厂--TransformerFactory.newInstance()Transformer trant = TransformerFactory.newInstance().newTransformer();//创建Source对象(绑定doc对象)--拿到内存中的数据     和      Result对象(绑定文件对象)--拿到磁盘上的文件 Source xmlSource = new DOMSource(dom);Result outputTarget = new StreamResult(file);trant.transform(xmlSource, outputTarget);}/*删除第三个联系人*/@Testpublic void delete() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 获得dom 对象,并拿到根元素。Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.拿到第三个linkman。Element linkman3 = (Element) dom.getElementsByTagName("linkman").item(2);//3. 通过其父元素干掉他linkman3.getParentNode().removeChild(linkman3);//4.同步Transformer trant = TransformerFactory.newInstance().newTransformer();Source xmlSource = new DOMSource(dom);Result outputTarget = new StreamResult(file);trant.transform(xmlSource, outputTarget);}/*修改第一个联系人的邮箱*/@Testpublic void modify() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestJAXP\\contacts.xml");//1. 获得dom 对象,并拿到根元素。Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);Element root = dom.getDocumentElement();//2.拿到第一个linkman 元素Element linkman1 = (Element) root.getElementsByTagName("linkman").item(0);//3.拿到第一个linkman元素的 email元素,并修改值。Element email = (Element) linkman1.getElementsByTagName("email").item(0);email.setTextContent("8888@qq.com");//4.同步Transformer trant = TransformerFactory.newInstance().newTransformer();Source xmlSource = new DOMSource(dom);Result outputTarget = new StreamResult(file);trant.transform(xmlSource, outputTarget);}
}

  

5. 使用Dom4J进行解析xml

  

package TestDOM4J;import java.io.File;
import java.io.FileWriter;
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;
import org.junit.Test;public class testDOM4J {/* 获取第二联系人的名字*/@Testpublic void select() throws Exception {//1.通过Dom4J获取dom 对象SAXReader reader = new SAXReader();Document doc = reader.read(new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml"));System.out.println(doc);//2.获得根节点Element root = doc.getRootElement();//3.拿到linkman,并获取第二个linkmanList<Element> linkmans = root.elements("linkman");Element linkman2 = linkmans.get(1);

          //4.拿到linkman2的name对象
          Element name = linkman2.element("name");
          String str = name.getText();
          System.out.println(str);

	}
/* 增加一个联系人*/@Testpublic void add() throws Exception {//1.通过Dom4J获取dom 对象File file = new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml");SAXReader reader = new SAXReader();Document doc = reader.read(file);//2.获得根节点Element root = doc.getRootElement();//3.直接给元素添加节点,设置值Element linkman = root.addElement("linkman");linkman.addElement("name").setText("张三");linkman.addElement("email").setText("1434314.@qq.com");linkman.addElement("adress").setText("上海奉贤");linkman.addElement("group").setText("中国");	//4.把修改后的内存中数据 存储到 硬盘xml 文件中,(同步,一定要关闭流)FileWriter fw = new FileWriter(file);//使用新的格式输出OutputFormat of = OutputFormat.createPrettyPrint();XMLWriter xw = new XMLWriter(fw, of);xw.write(doc);xw.close();fw.close();}/*删除第三个联系人信息*/@Testpublic void delete() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml");Document doc = new SAXReader().read(file);Element root = doc.getRootElement();//拿到第三个linkmanElement linkman3 = (Element)root.elements("linkman").get(2);//删除元素 ,同步linkman3.getParent().remove(linkman3);FileWriter fw = new FileWriter(file);doc.write(fw);fw.close();}/*修改第一个联系人的邮箱*/@Testpublic void modify() throws Exception{File file = new File("F:\\workspace\\TestXml\\src\\TestDOM4J\\contacts.xml");Document doc = new SAXReader().read(file);Element root = doc.getRootElement();//获得第一联系人的邮箱Element linkman1 = (Element)root.elements("linkman").get(0);Element email = linkman1.element("email");email.setText("1633333@163.com");//同步FileWriter fw = new FileWriter(file);doc.write(fw);fw.close();}
}

  

 

转载于:https://www.cnblogs.com/gshao/p/10285345.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win8.1 计算机 桌面快捷方式,win8.1操作系统中我的电脑在哪里?win8.1我的电脑快捷键添加方法介绍...

很多刚刚接触win8的用户会发现&#xff0c;xp中的“我的电脑”&#xff0c;win7中的“计算机”&#xff0c;到了win8难道只有“资源管理器”了吗&#xff1f;开始菜单里边倒是有“计算机”&#xff0c;但是无法放到桌面。在最新版的win8.1中也是如此&#xff0c;大家会发现熟悉…

mac你没有权限打开应用程序_如何管理Mac的隐私权限控制

在使用MAC电脑清理软件的时候&#xff0c;经常会出现需要权限问题&#xff0c;在没有权限的情况下&#xff0c;我们不能对一些文件进行更改和删除&#xff0c;那么该如何管理Mac的隐私权限控制呢&#xff1f;下面的文章就来告诉大家该如何设置隐身权限问题。第一步&#xff1a;…

Linux网卡绑定

很多情况下我们都需要用到网卡绑定这中情况&#xff0c;例如&#xff1a;大数据传输备份、网卡冗余。使用网卡绑定可以提高网络的传输速度&#xff0c;并且还能保证网络安全性&#xff0c;做到网卡的高可用&#xff0c;甚至可以节省IP地址。 网卡绑定模式 mode0&#xff1a;轮询…

c# 中通快递对接_快递共配是什么?行业前景怎么样?

首先了解快递共配是什么&#xff0c;随着快递市场竞争的加剧&#xff0c;降本增效成为快递网点越来越重视的方面&#xff0c;末端整合就成为快递网点普遍关注的一个焦点&#xff0c;即大家通常所说的共配。如何提升快递末端效率&#xff0c;一直都是快递企业比较关心的话题。不…

ceph存储原理_热门的分布式存储系统ceph入门介绍

一、什么是cephceph是当前最热门的分布式存储系统之一&#xff0c;是软件定义存储(SDS,SoftwareDefinedStorage)解决方案中的典范。其具备良好的可靠性、可扩展性&#xff0c;应用范围包括块存储(RBD,RadosBlockDevice)、文件存储(CephFS,CephFileSystem)和对象存储(RADOSGW,Re…

小程序点击调转带参数_带你走遍苏大的每个角落,校园导览小程序上线!

精彩推荐 1. 招新 | 携手趁韶华&#xff0c;约你同做“校媒人”&#xff01;2. 迎新现场 | 今天&#xff0c;“小20”是苏大的主角3. 苏州大学与亨通集团签订战略合作协议钟楼、红楼、精正楼……存菊堂、敬贤堂、子实堂……初至校园的“小20”们是否会有这样的烦恼在这楼宇亭台…

爬虫

爬虫 1、设计 分布式爬虫系统允许位于多个不同主机上的爬虫程序并行爬取提交的爬虫作业&#xff0c;进而协调他们之间的爬取能力。爬取队列由redis管理&#xff0c;每个spider通过修改的调度程序从queue中拉取job。 页面被spider成功爬取后&#xff0c;就交给管线进行进一步处理…

python下划线怎么输入_python下划线怎么打出来

python中下划线使用键盘上的Shift减号键即可打出&#xff0c;减号键位于0和加号键之间。 在Python中下划线还具有 private 和 protected 类似的访问权限作用&#xff0c;下面我们具体分析。Python主要存在四种命名&#xff1a; &#xff08;1&#xff09;object #公用方法 &…

二、先在SD卡上启动U-boot,再烧写新的U-boot进Nandflash

1. 制作SD卡 先准备一张2G的SD卡&#xff08;不能用8G的&#xff0c;2G的卡和8G的卡协议不一样&#xff09;&#xff0c;和烧写SD卡的工具write_sd以及需要烧写到SD卡中的u-boot-movi.bin。将SD卡格式化后连接到Ubuntu虚拟机中&#xff0c;注意在SD卡需要插入到读卡器中&#x…

java comparator_Java基础之String漫谈(二)

Java-String1. 导读上期分享了本人关于String四个问题, 本期我们继续探讨String中的两个问题:.1 String既然已经实现了Comparable接口, 为什么还要提供内部类----CaseInsensitiveComparator;.2 使用 "" 拼接String究竟干了什么? 为什么在循环中不让使用""…

掌握Java字节码

嘿! Happy Advent&#xff1a;D我是ZeroTurnaround的技术布道者Simon Maple&#xff08; sjmaple&#xff09; 。 您知道&#xff0c; JRebel伙计们&#xff01; 由于编写了类似于JRebel的产品&#xff0c;该产品与字节码进行交互的结果比您想像的更多&#xff0c;因此&#xf…

敲代码括号技巧_理解代码块概念,养成良好编程习惯 | 亲子课堂 第 3 课

亲子课堂关卡解析 / 英语教学 / 编程讲解 做亲子编程教育的好帮手&#xff01; 每周二、四定期更新 地牢面向真正0编程基础的孩子们&#xff0c;关卡被设计成迷宫的形式&#xff0c;引导孩子们使用编程思维解决问题。以循序渐进的方式&#xff0c;让大家理解掌握几个Pyth…

在struts2中push方法的使用_电脑使用中怎么截屏的几种方法

电脑在日常工作中经常需要用到截屏的操作&#xff0c;为了截取画面提供证明或者说明&#xff0c;像我就经常需要用到&#xff0c;当然我在写文章的时候更是需要用到&#xff0c;来配合文字的描述&#xff0c;使大家能更直观更容易的去操作&#xff0c;以达到快速解决电脑问题的…

卸载WPS后,原office出现各种问题,报错,图标混乱

1.运行环境win7专业版64位操作系统&#xff0c;之前电脑上装了WPS和office2013&#xff0c;后来卸载了WPS&#xff0c;导致office图标显示不正常&#xff08;因为WPS与office有很多冲突的地方&#xff0c;卸载的时候会影响到注册表&#xff0c;导致office的注册表损坏&#xff…

C#中的CultureInfo类

CultureInfo类位于System.Globalization命名空间内&#xff0c;这个类和命名空间许多人都不是很熟悉&#xff0c;实际我们在写程序写都经常间接性的接触这个类&#xff0c;当进行数字&#xff0c;日期时间&#xff0c;字符串匹配时&#xff0c;都会进行CultureInfo的操作&#…

clistctrl控件最后插入在后面_老板让我把图片放到Excel表格中,批量插入效率高...

私信回复关键词【福利】&#xff0c;获取丰富办公资源&#xff01;助你高效办公早下班&#xff01;大家好&#xff0c;我是懂点 Excel 的小E~初入「江湖」&#xff0c;还请大家多多关照&#xff01;今天我们来学学 Excel 图片的 6 个小技巧&#xff0c;满满都是干货&#xff0c…

python天气预报的功能介绍_python实现智能语音天气预报

本系统主要包括四个函数&#xff1a; 1、获取天气数据 1、输入要查询天气的城市 2、利用urllib模块向中华万年历天气api接口请求天气数据 3、利用gzip解压获取到的数据&#xff0c;并编码utf-8 4、利用json转化成python识别的数据&#xff0c;返回为天气预报数据复杂形式的字典…

部署环境_Hyperledger Fabric Composer环境部署(一)

声明&#xff1a;本体系Hyperledger Fabric Composer相关分享都是基于MacPro进行多次亲测和体验。今天我这里主要介绍的是这些先决条件安装完成后&#xff0c;如何搭建和使用一个基础环境的问题&#xff0c;适合有一定基础的同学一起交流&#xff0c;也欢迎随时留言交流&#x…

输入参数的数目不足_sklearn.decomposition.PCA 参数速查手册

sklearn常用的API参数解析&#xff1a;sklearn.linear_model.LinearRegression调用sklearn.decomposition.PCA(n_componentsNone, copyTrue, whitenFalse, svd_solverauto, tol0.0, iterated_powerauto, random_stateNone)参数n_components释义PCA 算法中所要保留的主成分个数 …

了解位图

几周前&#xff0c;我和Alistair一起研究了用于对Neo4j数据库中节点已附加到其上的标签进行建模的代码。 这种工作方式是将32个节点ID的块表示为每个标签的32位位图 &#xff0c;其中位1表示节点具有标签&#xff0c;而0表示没有标签。 例如&#xff0c;假设我们有节点ID 0-3…