XML学习笔记

Posted 马哥讲编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML学习笔记相关的知识,希望对你有一定的参考价值。

一、XML简介***

                  XML指的是可扩展标记语言!(特殊格式的文档)

二、XML特性***

1. 具有平台无关性!是一门独立的标记语言!

2. 具有自我描述性!大多数编程语言对XML都进行了支持(支持XML生成,XML解析常使用到:

3. 主要应用于网络数据的传输,以及本地数据的存储!

4. 在后期的学习中,经常使用XML进行配置文件的编写!

三、XML语法结构*

1. XML文档声明(用于描述XML版本 以及字符编码)

                   <?xmlversion="1.0" encoding="UTF-8"?>

2. 标记/标签/元素/节点(指的是同一个事物)

                            标签分为开始标签与结束标签,开始标签与结束标签之间描述标记的内容!

                            开始标签语法:<自定义标签名称>

                            结束标签语法:</自定义标签名称>

                                      例如:使用XML标签,描述一本书的书名:

                                               <bookname>金苹果</bookname>

3. XML文档中的标签,允许重名,允许嵌套,不允许交叉

                   例如描述一本书:

                            <book>

                                     <name>金苹果</name>

                                     <info>讲述了一个苹果,从青涩到金黄色的过程!</info>

                            </book>

4. 任何一个XML文档,都必须存在且只允许存在一个根标签!

5. 子标签,兄弟标签,后代标签,父标签以及祖先标签的概念!

                   案例:

                            <books><book>

                                               <name>金苹果</name>

                                               <info>讲述了一个苹果,从青涩到金黄色的过程!</info>

                                     </book><book>

                                               <name>红苹果</name>

                                               <info>讲述了一个苹果,从青涩到红色的过程!</info>

                            </book></books>

                   上述的案例中:

a) name标签是book标签的子标签

b) name标签是books标签的后代标签

c) book标签是name标签的父标签

d) books标签是 name标签的 祖先标签 (也称祖先标签为间接父标签)

e) info标签 name标签是兄弟标签

 

6. 属性

                   在开始标签中的,标签名称后可以编写属性:

                   语法:

a) 属性由一个个的键值对组成,

  1. 键与值之间使用等号连接

  2. 多个键值对之间使用 空格分割

  3. 值必须使用引号引住 (单双引号都可以)

                   案例:

                            <bookid="10001" type="成人读物">

                                     <name>红苹果</name>

                                     <info>讲述了一个苹果,从青涩到红色的过程!</info>

                            </book>

7. XML文档中的注释

                   多行注释:

                   <!--注释的内容 -->

a) XML文档案例1

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

                            <books>

                                      <book id="10001">

                                               <name>金苹果Ⅰ</name>

                                               <info>讲述了一个苹果,从青涩到金黄色的过程!</info>

                                      </book>

                                      <book id="10002">

                                               <name>金苹果Ⅱ</name>

                                               <info>又讲述了一个苹果,从青涩到金黄色的过程!</info>

                                      </book>

                                      <book id="10003">

                                               <name>金苹果Ⅲ</name>

                                               <info>还讲述了一个苹果,从青涩到金黄色的过程!</info>

                                    </book>

                            </books>

b) XML文档案例2

                           <?xmlversion="1.0" encoding="UTF-8"?>

                           <persons>

                                    <!-- 注释的内容-->

                                    <person id="10001">

                                              <name>蒋军</name>

                                              <age>18</age>

                                              <sex></sex>

                                    </person>

                            </persons>

四、Java中的 XML解析

 面试题:*****

         :Java中有几种XML解析方式,分别是什么? 有什么优缺点?

         :四种解析方式,分别是:

  1. SAX解析:事件驱动机制!解析器逐行解析XML文件,解析时,当发现标签开始,标签结束,文本内容,属性等等时,会自动发送事件,通知程序员解析特定内容

                   缺点:事件驱动,事件过后未处理的数据会被释放!

                                     只能通过事件来手动区分具体的节点层次!

                                     无法修改和删除节点内容

                   优点:占用资源较少!

  1. DOM解析:将整个XML文档,加载到内容,在内存中建立文档树模型

                   缺点:将整个文档加载到内存中,可能会加载一些无用的数据,浪费内存空间!

                   优点:因为整个加载到内存,可以很方便的删除,修改!

  1. JDOM解析:属于DOM解析的扩展

  2. DOM4J解析:属于DOM解析的扩展

        DOM4J解析步骤熟练

a) 得到一个指向XML文档的输入流

                           FileInputStreamfis = new FileInputStream("文件路径");

InputStream is= class.getClassLoader().getResourceAsStream("src文件夹下的文件名");

b) 创建一个XML读取对象(SAXReader),用来读取输入流!

                            SAXReader sr = new SAXReader();

c) 通过XML读取对象,读取XML文档的输入流,得到文档对象(Document)

                            Document doc = sr.read(is);

d) 通过文档对象,得到文档的根元素对象(元素对象Element)

                            Element root = doc.getRootElement();

e) 通过根元素,得到其他所有元素

五、Element类常用操作

l 获取元素名称     String name = element.getName();

l 获取元素文本内容     String text = element.getText();

l 设置元素文本内容     element.setText(String text);

l 根据子元素名称,得到子元素    Element子元素=element.element(String子元素名);

l 获取所有的直接子元素对象     List<Element> elements= element.elements();

l 获取属性对象(Attribute)    Attribute attr =element.attribute(String 属性名);

l 获取属性值         String value = element.attributeValue(String属性名);

l 直接获取子元素文本内容         String text = element.elementText(String子元素名);

六、Attribute 了解

         表示XML文档中的一个元素属性 .

         包含属性名 属性值:

                   获取属性名:String name = attribute.getName();

                   获取属性值:String value - attribute.getValue();

七、XPATH 解析XML

         通过路径方式,快速的查找一个 一组元素!

1. 路径表达式:

                   /:从根节点查找节点

                            例如:/book 表示从根节点查找一个或多个book节点

                   //:从发起查找的节点,查找其后代节点

                            例如:在根节点使用XPATH路径 //name,则表示查找文档中的所有name节点

                   .:选择发起查找的节点

                   ..:选择发起查找的节点的 父节点

                   @:用于在路径中 加入谓语,添加属性判断条件

2. 怎么使用路径表达式:

                  可以通过Node类的对象,调用方法,传入XPATH路径,得到查询后的节点:

                   Node:是一个接口,Document,Element,Attribute 接口的父接口!

                  方法:

                            一次查询单个节点

 Element element = node.selectSingleNode(Stirng路径);

                            一次查询一组节点

 List<Element> elements = node.selectNodes(String路径);

                  案例:

                   //xpath查询一组

 publicstatic void main(String[] args) throws Exception {

  FileInputStreamfis = new               FileInputStream("C:\\code\\22\\code1\\day01_XML\\src\\demo2.xml");

     SAXReadersr = new SAXReader();

    Documentdoc = sr.read(fis);

    Stringxpath = "//age";

    List<Element>elements = doc.selectNodes(xpath);

         for(int i = 0; i < elements.size(); i++) {

              System.out.println(elements.get(i).getText());

         }

 }

3. XPATH路径 谓语 了解

                  语法:

                            在路径字符串中,可以通过判断属性的方式,来限制查询的结果:

                   [@属性名]:必须存在某属性

                   [@属性名='某值']:必须存在属性,且属性值必须等于某值

                   [@属性名!='某值']:...

                   [@属性名>'xxx']:...

                   ...

                  案例:

 publicstatic void main(String[] args) throws Exception {

         FileInputStreamfis = new FileInputStream("C:/code/22/code1/day01_XML/src/demo2.xml");

                            SAXReadersr = new SAXReader();

                            Documentdoc = sr.read(fis);

                            Stringxpath = "//person[@id='10002']//age";

                            Elemente = (Element) doc.selectSingleNode(xpath);

                            System.out.println(e.getText());

                   }

 

4. DOM4J 生成XML文档 了解

                  Node的方法:

a) 添加节点

                            Elemente = node.addElement("元素名称");

b) 添加属性

                            node.addAttribute(String属性名,String 属性值);

  1. 步骤:

                                    i. 通过文档帮助器(DocumetnHelper),创建一个空的文档对象(Document)

                                     Documentdoc = DocumentHelper.createDocument();

                                  ii. 向文档中,添加并得到根节点

                                     Elementbooks = doc.addElement("books");

                                 iii. 通过根节点,丰富子节点 (添加节点)

                            for(int i=0;i<1000;i++){

                                              //向根节点,添加10000个子节点book

                                              Element book = books.addElement("book");

                                              //book中加入属性id

                                              book.addAttribute("id",10001+i+"");

                                              //book中加入name子节点

                                              Element name = book.addElement("name");

                                              //选项book中加入info子节点

                                              Element info = book.addElement("info");

                                              //丰富子节点nameinfo 的内容

                                              name.setText("书名"+i);

                                              info.setText("图书简介"+i);

                                     }

                                 iv. 创建一个文件字节输出流,用于输出当前的新文档对象

                            FileOutputStreamfos = new FileOutputStream("存储路径");

                                  v. 将文件输出流,转换为XML输出流(XMLWriter).

                            XMLWriterxw = new XMLWriter(fos);

                                 vi. 将文档输出,并释放资源

                            xw.write(doc);

                            xw.close();

八、XStream 了解

         快速的将一个 Java中的对象,转换为XML格式字符串:

步骤:

  1. 创建XStream工具对象

                                     XStream x = new XStream();

2. 替换指定类的 节点名称

                                     x.alias("节点名",要转换的类信息);

  1. 将对象转换为XML字符串

                                     String 字符串= x.toXML(Java对象);


 


以上是关于XML学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

XML学习笔记

Xml学习笔记

XML学习笔记

XML学习笔记

XML学习笔记

xml增强学习笔记