目录



  • XML文件详解
  • 一丶XML简介
  • 1.文档结构
  • 2.XML中的元素(Element)或者叫做标签(Tab).属性 文本内容. 节点(Node)
  • 3.XML语法规则
  • 二丶XML文档解析
  • 三丶使用XPath定位信息



XML文件详解

一丶XML简介

XML是一个可扩展的标记语言.(eXTENsible Markup language XML) 很类似于是HTML. HTML是有自己固定的标签,XML是自己定义的.XML主要作用是用来传输数据的, HTML主要用来显示数据的.所以XML不能替代HTML.

1.文档结构

XML是一个倒立的树形结构.

我们可以使用JAVA创建一个

文件(FILE) -> 新建 ->其它(other) 或者CTRL +N 出现以下界面.

Java xml 与 参数动态配置 java xml格式_移动开发


我们选择XML file即可.

创建完毕之后的结果

Java xml 与 参数动态配置 java xml格式_java_02


下方有两种显示方式,第一种就是我们的表格形式,第二种就是源码形式.

第二种:

Java xml 与 参数动态配置 java xml格式_XML_03


第一行代码,说明了 XML的文件头.

<?xml version ="1.0" encoding="UTF-8"?> 说明了XML的版本,以及编码.

最基本的XML代码

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

 <Client1>
  <ClientId>1</ClientId>
  <ClientName> tom</ClientName>
  <age>12</age>
 </Client1>
 
<Client2>
  <ClientId>2</ClientId>
  <ClientName> Jason </ClientName>
  <age>14</age>
 </Client2>
 
</MyClient>

首先有一个根节点,叫做 MyClient 写法是: 这个是根节点

根节点中有两个子节点. 每个子节点有自己各有的属性, 例如子节点 Client1 跟 Client2

下面就是属性了,属性我们可以给值,或者继续添加子节点.我们切换成列表模式查看.

Java xml 与 参数动态配置 java xml格式_移动开发_04


所以可以看图表,可以得出,XML是一个数节点管理模式.

2.XML中的元素(Element)或者叫做标签(Tab).属性 文本内容. 节点(Node)

1.节点. 节点就是我们自己定义的根节点,如上面的定义的MyClient

2.元素跟标签,元素跟标签是我们自己定义的,比如我们的 MyClient Client1等可以说做标签.或者元素.

3.文本内容, 文本内容就是元素后面的内容,比如我们输入的 文本,如上面代码的 jason 12 等等都是

4.属性. 属性是放在元素里面了. 例如 后面的ID放到元素里面了并赋值,就是属性

如下,如果我们给了属性,那么列表视图就会改变.

Java xml 与 参数动态配置 java xml格式_子节点_05


可以看到,属性哪里已经有我们给的属性名称.以及颜色变成绿色. 后面跟着的1就是我们的属性值.

3.XML语法规则

上面我们编写了一个简单的XML文件.但是它也是有规则的.
1.必须有一个根元素才可以. 例如上面我们写的(MyClient)
2.文档必须有关闭标签,我们在编写XML的时候都有开始标签跟结束标签,例如 一个开始标签,一个结束标签.
3.标签大小写敏感, 开始标签的大小写.跟结束标签必须大小写一样.
4.结构必须正确的嵌套, 比如我们

<MyClient>
  <Client1>
  </MyClient>
</Client1>

这样就是错误的 必须正确的嵌套才可以. MyCliet开始标签在前边,那么最后也要是MyClient,一一对应的关系. 我们写的任何内容都是在他们之前.所以结束标签不会再中间的.

二丶XML文档解析

什么是XML解析,我们说过,XML是一个文本文档.只不过有一定的格式.是用来存储数据的.我们第一个标题中就写了一个简单的XML文件. 那么既然他是存储数据的,那么就要读取出来才可以.怎么进行读取,就是本标题所讲的XML解析.

JAVA中也提供了XML文档解析API. Android中也有.XML一般是配置信息的.或者在C/S结构中用来传输数据的.

javax.xml.parsers 中有解析XML的类

Java xml 与 参数动态配置 java xml格式_移动开发_06

一个基于文档的 DOCumentBuilderFactory 一个是基于事件的. SAXparser类.
doc类是全部加载进去, SAX是逐行读取.
JAVA代码解析XML
1.首先编写一个简单的XML文件, 编写图书管理的XML文件

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

  <Book>
    <id>1001</id>
    <name>Android</name>
    <price>100</price>
  </Book>
  
   <Book>
    <id>1002</id>
    <name>IOS</name>
    <price>45.50</price>
  </Book>
  
   <Book>
    <id>1003</id>
    <name>C++</name>
    <price>56.7</price>
  </Book>

</<MyBooks>>

2.建立与之对象的类. 与元素相对应.

package com.xml;

public class BookOpt {

    private int id;
    private String name;
    private float price;
    public BookOpt() {
        // TODO 自动生成的构造函数存根
    }

}
Set Get方法自动生成即可.这里不贴代码了.

3.Doc代码解析XML文件

public static void ParseWithDoument() throws Exception {
        //1.doc解析
/*
解析思路:
1.使用Doc类进行解析,首先创建工厂对象
2.使用工厂对象创建DocBuider
3.使用DocumentBuilder的方法 parse(xml路径) 可以获得完整的XML文件内容
4.完成的XML文件内容使用Document进行接收
5.使用Document中的 getDocumentElement();可以获得XML的根节点
6.根节点的方法getElementsBytagName(子节点) 传入子节点可以获取子节点的所有内容
7.所有子节点使用NodeList进行接收存储.只需要进行遍历即可得出每个子节点的内容.
8.每一个节点是一个NODE类型.可以使用item(i)获取每一个节点
9.子节点中也有子节点,可以使用getChildNodes()获取子节点中所有节点,还是NodeList保存
10.使用节点中的 getNodeName()可以获取子节点的名称
11.通过判断子节点的名称来设置对应的值.  获取值使用 getFirseChild().getNodeValue();即可.
*/
        public static void ParseWithDoument() throws Exception {
        //1.doc解析
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //使用工厂类,创建一个factory
        DocumentBuilder buider = factory.newDocumentBuilder(); //获得一个doc实例
        Document doc = buider.parse("NewFile.xml"); //传入XML路径,返回解析后的Doc类.
        NodeList Items = doc.getElementsByTagName("Book");//获取了所有BOOK节点
        for(int i = 0; i < Items.getLength();i++) {
            //获取子节点
            Node  nodes = Items.item(i); //要从子节点中继续获取节点
            NodeList ChildNodes = nodes.getChildNodes(); //如果有子节点就是用这个
            BookOpt Book = new BookOpt();
            for(int j = 0; j < ChildNodes.getLength();j++) {
                
                Node ChildNode = ChildNodes.item(j);
                String TagName = ChildNode.getNodeName();
                //判断标签是哪个名字
                if(TagName.equals("id")) {
                    String Id = ChildNode.getFirstChild().getNodeValue();
                    Book.setId(Integer.parseInt(Id));
                }else if(TagName.equals("name")) {
                    String name = ChildNode.getFirstChild().getNodeValue();
                    Book.setName(name);
                    
                }else if(TagName.equals("price")) {
                    
                    String Price = ChildNode.getFirstChild().getNodeValue();
                    Book.setPrice(Float.parseFloat(Price));
                }
                
            }
            System.out.println(Book);

            
        }
        
    }

}

实现结果:

Java xml 与 参数动态配置 java xml格式_XML_07


对于大文档,解析效率非常低.因为所有XML都读取到内存中.

掌握上面的方法其实掌握树形结构以及节点就可以.

三丶使用XPath定位信息

上面说的使用文档进行定位,我们还可以使用Java带了Xpath来定位.给一个路径就可以定位.
代码如下:

private static void parseXpath()throws Exception {
        // TODO 自动生成的方法存根
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc  =     builder.parse("NewFile.xml");
        XPath path = XPathFactory.newInstance().newXPath();
        
        String ePath = "/MyBooks/Book[1]/id";
        System.out.println(path.evaluate(ePath, doc,XPathConstants.STRING));
    }

1.首先创建DocumentBuilder对象.因为要获取完整的DocXML文档.都是使用工厂方法创建

2.使用XPath,xPath也是工厂创建

3.指定一个XML下面的路径. /根目录/子节点[xxx]/标签(元素); 这样就可以直接获得.

4.使用Xpath的方法 evaluate方法. 传入路径, 以及XML的内存.传入常量String代表返回的是Strign显示.

5.最后运行就可以直接获取了.

Java xml 与 参数动态配置 java xml格式_子节点_08