XML

1.xml简介

XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集。
XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。 W3C在1998年2月发布1.0版本;
W3C在2004年2月发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。

2.xml的用途

2.1数据交换:不同语言之间用来交换数据
2.2小型数据库:用来当数据库存存储数据
2.3程序的配置文件:主要是这种用途

3.xml的文档说明

创建一个xml文件后缀名为 .xml
必须要写一个文档说明(写了文档说明后,表示写的是xml的内容)
注意:文档说明必须在第一行第一列,其他都不能出现在第一行第一列

<?xml version=”1.0” encoding=”gbk”?>
<?xml version=”1.0” encoding=”gbk” standalone=”yes”> 
<?xml version=”1.0” encoding=”gbk” standalone=”no”> 

Standlone表示是否需要依赖其他文件;后两种方式一般不用;

4.xml元素的定义

  1. 标签定义又开始必须有结尾 <person> </person>
  2. 标签没有内容可以使用标签内结束 <aa/>
  3. 标签是可以嵌套的但是必须合理嵌套

    正确的写法:
    <person>
    <name>张三</name>
    </person>

    不合理嵌套:
    <aa> <bb> </aa> </bb>

  4. 一个xml中只能有一个根标签,其他都是他的子标签或者孙标签;

  5. 在xml当中空格和换行都会当做内容来解析 一下代码含义是不一样的;

    <aa>1111111</aa>

    <aa> 111 </aa>

  6. 标签可以是中文的;

    <标签> 老郭</标签>

  7. xml中的标签命名规则(重点)
    A. xml代码区分大小写
    <p></P> 是错误的写法
    B. Xml中标签不能以数字和下划线开头
    <aa></aa> <_2a></_2a>
    C. xml当中标签不能以xml、XML、Xml等开头;
    <xmlaa></xmlaa> <Xmlaa></Xmlaa>
    D.xml的标签不能包含空格和冒号
    <a b></a b> <a:b></a:b>
    (B、C两条好像不够准确,但是官方给出的命名规则就是这样的);

5.xml属性的定义

Html是标记型文档,可以有属性;
Xml也是标记型文档,也可以有属性;

<person  id1=”aaa” id2=”bbb”> 张三</person>
<person  name=”aaa” age=”18”> 张三</person>

<person>
<name>老郭</name>
<age>18</age>
</person>

属性定义的要求:
1.一个标签可以有多个属性;
<person id1=”aaa” id2=”bbb”>张三</person>
2.属性名称不能相同;
错误的写法:<person i d1=”aaa” id1=”bbb”> 张三</person>
3.属性名称和属性值之间使用等号连接,属性值使用双引号或者单引号引起来;
4.Xml属性的名称规范和元素名称规范一致

6.xml的特殊字符

xml中有些字符数不能正常显示的

特殊字符                替代符号
&                       &amp;
<                       &lt;    
>                       &gt;
“                       &quot;
‘                       &apos;

7.xml的解析

1.实现查询XML操作

操作的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<student>
    <stu>
        <name>张三</name>
        <age>23</age>
    </stu>
    <stu>
        <name>李四</name>
        <age>24</age>
    </stu>
    <stu>
        <name>赵六</name>
        <age>46</age>
    </stu>
</student>

1.获取所有根节点下的子节点

public class XmlTest01 {
    public static void main(String[] args) throws DocumentException {

        //1.创建解析器
        SAXReader reader = new SAXReader();
        //2.得到xml文档
        Document document = reader.read("src/01.xml");
        //3.获取根节点
        Element root = document.getRootElement();
        //4.获取根节点下所有的子节点
        List<Element> elements = root.elements("stu");
        for (Element element : elements){
            //获取name标签
            Element ele = element.element("name");
            //获取标签的值
            String text = ele.getText();
            System.out.println(text);
        }
    }
}

2.获取第一个name的值

public class XmlTest02 {
    public static void main(String[] args) throws Exception {
        //调用方法
        findFirstName();
    }

    public static void findFirstName() throws Exception {
        //1.创建解析器
        SAXReader reader = new SAXReader();
        //2.获取xml对象
        Document document = reader.read("src/01.xml");
        //3.获取根节点
        Element root = document.getRootElement();
        //4.获取第一个stu对象
        Element stu = root.element("stu");
        //5.获取name标签对象
        Element name = stu.element("name");
        //6.获取到name标签的文本对象
        String text = name.getText();
        //7.输出文本
        System.out.println(text);
    }
}

3.获取第二个name的值

public static void main(String[] args) throws Exception {

        //1.创建解析器
        SAXReader reader = new SAXReader();
        //2.得到xml
        Document document = reader.read("src/01.xml");
        //3.获取根节点
        Element root = document.getRootElement();
        //4.回去所有子节点并放入list中
        List<Element> list = root.elements("stu");
        //5.根据下标获取对应的子节点
        Element stu = list.get(1);
        //6.获取name标签对象
        Element name = stu.element("name");
        //7.通过name标签对象获取文本值
        String text = name.getText();
        //8.s输出
        System.out.println(text);
    }
}

2.实现在末尾添加节点的操作

public class XmlAdd {
    /*
     * 在子节点末尾添加元素的操作
     */
    public static void main(String[] args) throws Exception {
        //1.创建解析器
        SAXReader reader = new SAXReader();
        //2.得到xml文档
        Document docunment = reader.read("src/01.xml");
        //3.获取到根节点
        Element student = docunment.getRootElement();
        //4.获取第一个子标签
        Element stu = student.element("stu");
        //5.添加标签元素
        Element height = stu.addElement("height");
        //6.设置标签的文本
        height.setText("197");
        //7.回写
        //定义心xml的文本格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/01.xml"),format);
        //8.通过xml输出流将整个xml文档输出
        xmlWriter.write(docunment);
        //9.关闭流
        xmlWriter.close();
    }
}

操作结果:

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

<student> 
  <stu> 
    <name>张三</name>  
    <age>23</age>  
    <height>197</height>//添加成功
  </stu>  
  <stu> 
    <name>李四</name>  
    <age>24</age> 
  </stu>  
  <stu> 
    <name>赵六</name>  
    <age>46</age> 
  </stu> 
</student>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值