博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaSE】day14_XML
阅读量:4305 次
发布时间:2019-05-27

本文共 5968 字,大约阅读时间需要 19 分钟。

【JavaSE】day14_XML

1.XML

    是一种常用的数据结构,用于数据的共享

 

2.XML 语法

  1) xml是文本文件,常用编码是 utf-8(方便国际化)

  2) xml的第一行处理节点:

    <?xml version="1.0" encoding="utf-8" ?>

    注意:必须在第一行,前面不能有“注释”和空行!
   

  3) xml 注释:

    <!-- 你的注释信息 -->

     注意,不能写Java的注释!
     

  4) 标签(标记 tag), 标签有3种

    开始标签(start tag):<标签名>

    结束标签(end tag):</标签名>

     单标签(自结束标签):<标签名/>

     单标签是 <标签名></标签名> 的简写 <标签名/>
    
  5) 内容:开始标签和结束标签之间的数据称为“内容”

    Content    

    内容:文本内容,子元素,子元素和文本的混合
    
  6) 元素:开始标签+内容+结束标签 称为元素
 

  7 元素的属性:

    7.1) 在开始标签上定义

    7.2) 由属性名和属性值组成

    7.3) 属性值必须添加 引号

    7.4) 属性无序,不能重复。
    

  8) 良好的结构:XML 文档的结构“规定”:

   8.1) XML 文档必须有“唯一”的根元素!

      一个xml 只能有一个根元素!

      xml文档,只有一个元素!其他元素都是根元素的内容

   8.2) 所有标签必须配对使用!

    开始标记和结束标记必须配对!

    无内容的元素<标签名></标签名> 可以简写 <标签名/>

   8.3) 标签可以嵌套,但是不能交叉嵌套:

     合理嵌套:<book><name>冯唐</name></book>

    不合理嵌套:<book><name>冯唐</book></name>

    标签在嵌套时候,外层称为“父元素”,内层称为“子元素”

   8.4) 大小写是敏感的。区分大小写

    正确:<name>冯唐</name> <Name>冯唐</Name>

    错误:<Name>冯唐</name>

   8.5) 属性: 无序,属性值必须使用 引号
   
   满足以上规则称为:格式良好的XML
 

  9) XML 的可扩展性:

    9.1) XML没有规定标签名!标签名可以任意扩展!

    9.2) 没有规定属性,XML元素的属性可以扩展!

    9.3) 没有规定元素的嵌套关系,嵌套关系可以扩展。
   
   XML 是可以任意扩展,标记(标签)语言。
 

  10) xml 的优点:

    1) 可以任意扩展!可以描述任何数据。是通用的数据格式。干啥都行!

    2) 严格的语法规定!可以用通用的API解析。

    简化了编程。提高开发效率。
    

  11) 在xml的正文中出现特殊符号:< > & 等需要替换为 "实体(entity)" ,否则会出现语法混乱;

    < 替换为 &lt;

    > 替换为 &gt;

    & 替换为 &amp;

    还有很多很多... 如 : 中 替换为 &#20013;
    
  12) CDATA: 如果大量的出现特殊符号,可以直接使用CDATA书写,就不用进行替换了!
 
    在XML文本中使用,处理特殊符号:
    区别:如果文本中有少了的特殊符号:实体替换。
       如果文本中有大量的特殊符号:CDATA书写
    

3.读写XML:

   1) XML是文件,读写必须使用 IO流!

     使用基本流可以读写XML,但是非常麻烦!

     所以有API,帮助读写XML,简化了XML的读写!
   

   2) DOM4j API 简化了XML文件的读写。

   来自于开源社区。

     DOM4j API 底层也是 字节IO流。
     

   3) DOM4j 的使用!

    1) 导入DOM4j 的API jar文件

      jar文件 = 一批class

    2) 使用 SAXReader读取 XML文件
    

   4)DOM4j API 用途

    1 - 读取XML为doc对象
    2 - 获取XML数据
    3 - 更新XML数据
    4 - 写出XML文件

    5 - 创建新的XML文档。

4.dom4j--SAXReader代码演示:

package day06;//SAXREader 来自于 dom4j-1.6.1.jar 文件import java.io.FileInputStream;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Demo1 {	public static void main(String[] args) {		try{			FileInputStream fis = new FileInputStream("book.xml");						SAXReader reader = new SAXReader();						/*			 * reader.read(byte流)			 * 返回doc 对象			 */			Document doc = reader.read(fis);				System.out.println(doc.asXML());						fis.close();						//访问根元素			//Element 来自 org.dom4j 包中的Element			Element root = doc.getRootElement();			System.out.println(root.asXML());					}catch(Exception e){			//文件IO异常,XML文件的格式不是良好的			e.printStackTrace();		}			}}

5.dom4j--XMLWriter、JUnit代码:

package day06;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;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 TestCase {	//@Test	//测试方法:共有,无参数,无返回值 的测试方法	public void hello(){		System.out.println("Hello World");	}	//@Test	public void helloKitty(){		System.out.println("Hello Kitty");	}		/**	 *  测试Element的elements方法 :获取全部的子元素	 *  1.打开XML 得到 doc	 *  2.获取根元素	 *  3.使用elements方法 获取根元素的 全部子元素	 */	//@Test	public void testElements() throws Exception{		FileInputStream fis = new FileInputStream("book.xml");		SAXReader reader = new SAXReader();				//获取DOM对象		org.dom4j.Document doc = reader.read(fis);		fis.close();				//获取根元素		Element root = doc.getRootElement();				//List elements()		//获取当前元素的全部子元素(集合)		List
list = root.elements(); //输出全部子元素 for(Element e : list){ //System.out.println(e.asXML()); } Element first = list.get(0); System.out.println(first.asXML()); List
firstList = first.elements(); for(Element e : firstList){ System.out.println(e.asXML()); } } /** * 测试element方法 */ //@Test public void testElement() throws Exception{ FileInputStream fis = new FileInputStream("book.xml"); SAXReader reader = new SAXReader(); Document doc = reader.read(fis); fis.close(); Element root = doc.getRootElement(); //空指针异常,只能获取一级子节点 //System.out.println(root.element("author").asXML()); Element book = (Element)root.elements().get(0); //获取book中的 author子元素 Element author = book.element("author"); System.out.println(author.asXML()); //获取元素中的文本内容:String e.getText() //String e.getTextTrim() 并去除空白 String str = author.getTextTrim(); System.out.println(str); //练习 Element book4 = (Element)root.elements().get(3); Element absEle = book4.element("abstract"); str = absEle.getTextTrim(); System.out.println(str); //获取一个节点的名:String getName() //元素节点的名称就是标签的名称 String tag = author.getName(); System.out.println(tag); //dom4j提供了读取节点属性的方法 //String attributeValue("属性名") --返回属性值 //System.out.println(book.asXML()); String cata = book.attributeValue("catalog"); System.out.println(cata); //修改(添加)属性 addAttribute,在内存中修改(硬盘上文件的内容不变)! book.addAttribute("catalog","love"); System.out.println(book.asXML()); //修改节点的文本 author.setText("苍老师"); System.out.println(book.asXML()); //为元素增加子元素--home再添加一个book(为book添加name和author) Element newBook = root.addElement("book"); newBook.addAttribute("id","5"); Element n = newBook.addElement("name"); Element a = newBook.addElement("author"); n.setText("斗破苍穹"); a.setText("天蚕土豆"); System.out.println(root.asXML()); //将内存中的doc写出文件中:使用dom4j创建XML // XMLWriter 来自dom4j API 高级流 依赖低级的byte流 FileOutputStream fos = new FileOutputStream("book_new.xml"); //自动添加"空白节点" --dom4j的API //内存中的doc对象格式不受影响 OutputFormat ofmt = OutputFormat.createPrettyPrint(); XMLWriter xmlw = new XMLWriter(fos,ofmt); //将内存中的doc对象写出到文件中 xmlw.write(doc); xmlw.close(); } /** * 使用dom4j创建XML */ @Test public void testCreateDoc() throws Exception{ //创建空doc对象 Document doc = DocumentHelper.createDocument(); //添加根元素 Element root = doc.addElement("home"); //添加子元素 Element book = root.addElement("book"); //给book添加子元素name和author Element n = book.addElement("name"); n.setText("武动乾坤"); book.addElement("author").setText("土豆"); System.out.println(doc.asXML()); FileOutputStream fos = new FileOutputStream("book_doc.xml"); OutputFormat ofmt = OutputFormat.createPrettyPrint(); XMLWriter xmlw = new XMLWriter(fos,ofmt); xmlw.write(doc); xmlw.close(); } }

        

转载地址:http://ugews.baihongyu.com/

你可能感兴趣的文章
PCB反推理念
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
git 提示:error: unable to rewind rpc post data - try increasing http.postBuffer
查看>>
php 解决json_encode中文UNICODE转码问题
查看>>
LNMP 安装 thinkcmf提示404not found
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>
phpstorm开发工具的设置用法
查看>>
Linux 系统挂载数据盘
查看>>
Git基础(三)--常见错误及解决方案
查看>>
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>
apache下虚拟域名配置
查看>>
session和cookie区别与联系
查看>>
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>