XML
来源:互联网 发布:python 时间的加减 编辑:程序博客网 时间:2024/05/21 23:31
xml的概述与如何编写xml文件
xml语言的概述
xml语言是具有结构性的标记语言, 可以灵活的存储一对多的数据关系。
以上这种数据, 如果通过我们学习的集合来存储的话, 需要通过多个集合的嵌套使用. 那么很显然, 数据存储的过程就非常麻烦, 但是我们今天所学习的xml文件就可以很简单的存储这种一对多的数据
xml文件是用来做什么的?
存储数据
xml是怎样存储数据的?
以标签的形式存储
例: Jack
Xml文件的组成部分
文档声明
元素
元素的属性
注释
CDATA区
特殊字符
文档声明
在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行
这就好比我们在写java文件的时候需要声明class一样, 就是个硬性的规定.
<?xml version='1.0' encoding='UTF-8'?> xml表示标签的名字 version表示当前文件的版本号 encoding表示当前编码, 需要跟文件的编码产生对应关系
xml的元素
1: xml中的元素其实就是一个个的标签
2: 标签分为两种
a: 包含标签体 理解: 简括号全部成对儿出现, 所有的数据都用一对儿简括号存储 例: <student> <name>zhangsan</name> <age>18</age> </student> b: 不包含标签体 理解: 只有最外层的一个简括号,括号用/标识结束, 内部的数据都用属性来编写 <student name="zhangsan" age="18" /> 两种方式都需要掌握, 但是第二种编写起来会更加方便
标签(元素的书写规范)
严格区分大小写;<p><P>只能以字母或下划线开头;abc _abc不能以xml(或XML、Xml等)开头----W3C保留日后使用;名称字符之间不能有空格或制表符;名称字符之间不能使用冒号 : (有特殊用途)
元素中属性的注意事项
一个元素可以有多个属性,每个属性都有它自己的名称和取值。
属性值一定要用引号(单引号或双引号)引起来。
属性名称的命名规范与元素的命名规范相同
元素中的属性是不允许重复的
在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述
xml的注释
格式: <!—被注释的内容 -- > 注意: 注释不能嵌套定义
引入CDATA区
为什么要使用CDATA区域?
如果我们在标签中写入的内容, 想要带有标签的标记符号的话, 就需要对这段内容进行转义就好比java中的打印语句, 想要打印出”这个字符就必须用/进行转义.标签也是一样, 想要将<itheima>当做内容存储的话, 就需要对他进行转义.
如何转义?
注意:
这种转移可以达到效果, 但是如果操作的数据过多, 编写起来会非常痛苦, 所以, 可以使用CDATA区来解决此问题
解析xml文件
XML解析的两种方式
DOM方式和SAX方式
DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。
SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。
XML解析开发包
JAXP:是SUN公司推出的解析标准实现。
Dom4J:是开源组织推出的解析开发包。
Dom for java four
Log4j
总结:
DOM: 将整棵树一口气全部加载到内存当中, 我们可以非常方便的操作任意的标签和属性.
但是, 如果整棵树特别大的时候, 会出现内存溢出的问题
节点: 标签、属性、文本、甚至是换行都称之为节点
SAX: 一个节点一个节点的进行解析
Dom4J的方法概述
Document
* Element getRootElement() :获取根元素对象(根标签)
* Element
* List elements() :获取所有的子元素
* List elements(String name):根据指定的元素名称来获取相应的所有的子元素
* Element element(String name):根据指定的元素名称来获取子元素对 象,如果元素名称重复,则获取第一个元素
* String elementText(String name) :根据指定的子元素名称,来获取子元素中的文本
* String getText() :获取当前元素对象的文本
* void setText(String text):设置当前元素对象的文本
* String attributeValue(String name):根据指定的属性名称获取其对应的值
* public Element addAttribute(String name,String value):根据指定的属性名称和值进行添加或者修改
Dom4J的案例 (获取)
private static void method2() throws Exception { //2、遍历所有元素节点:打印他们的元素名称。 //获取根元素 Document document = Dom4JUtils.getDocument(); Element rootElement = document.getRootElement(); treeWalk(rootElement); } public static void treeWalk(Element element) { //输出元素的名称 System.out.println(element.getName()); //获取指定元素的所有子元素 List<Element> es = element.elements(); for (Element e : es) { treeWalk(e); } } private static void method() throws Exception { //1、得到某个具体的节点内容:打印"郑州" Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //获取根元素下的所有子元素 List<Element> elements = rootElement.elements(); //根据索引获取第一个City元素 Element cityElement = elements.get(0); //根据子元素的名称来获取子元素的文本 String text = cityElement.elementText("Name"); System.out.println(text); }<?xml version="1.0" encoding="UTF-8"?><State Code="37" Name="河南" description="郑州" GDP="99999亿"> <City> <Name>郑州</Name> <Region>高薪区</Region> </City> <City>三门峡</City> <City>洛阳</City> <City>安阳</City> <City>南阳</City> </State>
Dom4J的案例(删除和修改)
public static void write2XML(Document document) throws IOException { OutputFormat format = OutputFormat.createPrettyPrint(); //format.setEncoding("UTF-8");//默认的编码就是UTF-8 XMLWriter writer = new XMLWriter( new FileOutputStream("src/com/itheima_04/city.xml"), format ); writer.write( document ); }private static void method3() throws Exception, IOException { //3、修改某个元素节点的主体内容:信阳-->安阳 Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //获取根元素下的所有子元素 List<Element> es = rootElement.elements(); //根据索引可以获取指定的元素 Element cityElement = es.get(3); //修改文本 cityElement.setText("安阳"); //写回文件 Dom4JUtils.write2XML(document); }private static void method4() throws Exception, IOException { //6、删除指定元素节点:删除元素开封 Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //获取根元素下的所有子元素 List<Element> es = rootElement.elements(); Element cityElement = es.get(1); //无法自杀,找他爹 Element parentElement = cityElement.getParent(); parentElement.remove(cityElement); //写回文件 Dom4JUtils.write2XML(document); }
Dom4J的案例(添加)
private static void method5() throws Exception, IOException { //4、向指定元素节点中增加子元素节:添加一个新城市<City>南阳</City> Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //添加元素 Element cityElement = rootElement.addElement("City"); //设置文本 cityElement.setText("南阳"); //写回文件 Dom4JUtils.write2XML(document);}private static void method6() throws Exception, IOException { //5、向指定元素节点上增加同级元素节点:在洛阳前面,添加一个<City>三门峡</City> //创建一个新的元素对象 Element cityElement = DocumentHelper.createElement("City"); //设置文本 cityElement.setText("三门峡"); Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //获取根元素下所有的子元素 List<Element> es = rootElement.elements(); //将新的元素添加到子元素列表中 es.add(1, cityElement); //写会文件 Dom4JUtils.write2XML(document);}
Dom4J的案例(属性获取和添加)
private static void method7() throws Exception { //7、操作XML文件属性:打印State的Name Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //根据属性名称获取值 String value = rootElement.attributeValue("Name"); System.out.println(value);}public static void main(String[] args) throws Exception { //7、操作XML文件属性:打印State的Name //8、添加属性:State: GDP="99999亿" Document document = Dom4JUtils.getDocument(); //获取根元素 Element rootElement = document.getRootElement(); //添加新的属性和对应的值 rootElement.addAttribute("GDP", "99999亿"); //写回文件 Dom4JUtils.write2XML(document);}
- XML
- XML
- XML
- XML
- xml
- xml
- XML
- XML
- XML
- xml
- xml
- XML
- XML
- xml
- xml
- xml
- XML
- XML
- Mycat读写分离与注意事项
- Oauth详解
- java多线程获取结果 Callable和Future
- 排序算法一——冒泡排序
- zoj3710 friends(floyd变形)
- XML
- 套路数学——扫雷
- 浅谈JVM内存模型
- FTP学习2_FTP命令之删除多个文件/删除整个文件夹
- ImportError: No module named win32api解决
- CSRF攻击及预防
- Mysql的优化
- 解决Could not find method android() for arguments问题
- HTML5+CSS3自学笔记01-CSS2选择器