XML的基本使用

通俗理解:就比如说一个管理系统比作一个做模具的机器,那么这个机器在运动之前需要设置好一些参数,作出模具的大小,形状等,即管理系统就像是机器,而XML就像是这些参数的一个清单,在没有XML的情况下,这些参数是在管理系统内的,每次修改完一些参数,就要重新把机器构建一遍,而抽取之后,系统不用再重建,只要把参数改好,重启机器即可,这就是配置文件的使用目的。

预定义:就是指像<h1></h1>、<ul><li></li></ul>、<p>等等这样的标签,他们都是已经

定义了的,像h1就是一级标题,ul、 li 就是列表,p标签就是段落,但是div它就只是一个div,

它除了是块级元素,不会对里面的内容做什么,需要你自己去定义样式,这样它才能根据样式去显示

  • pcdata是用来说明元素信息的,表示该元素不能再有 子元素/子节点

用法:

1.首先编辑DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT hr (employee+)> 规定XML中至少出现一次employee
<!ELEMENT employee (name,age,salary,department)>中间那个空格是极其易错点,否则约束无效
<!ATTLIST employee no CDATA ""> 表示有no属性,属性名为no,类型是文本类型,默认值""
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT department (dname,address)>
<!ELEMENT dname (#PCDATA)>
<!ELEMENT address (#PCDATA)>

2.在XML文件中引用DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hr SYSTEM "hr.dtd"> 加载约束,hr代表根节点标签,SYSTEM代表本地文件
<!-- 人力资源管理系统 -->
<hr>
    <employee no="3301">
        <name>李铁柱</name>
        <age>37</age>
        <salary>3600</salary>
        <department>
            <dname>人事部</dname>
            <address>XX大厦-B105</address>
        </department>
    </employee>
    <employee no="3302">
        <name>林海</name>
        <age>50</age>
        <salary>7000</salary>
        <department>
            <dname>财务部</dname>
            <address>XX大厦-B106</address>
        </department>
    </employee>
    <employee no="3303">
        <name>安娜</name>
        <age>24</age>
        <salary>4600</salary>
        <department>
            <dname>人事部</dname>
            <address>XX大厦-B105</address>
        </department>
    </employee>
</hr>

用法:

1.首先编写XSD的规范文件

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="hr">
        <!-- complexType标签含义是复杂节点,包含子节点时必须使用这个标签 -->
        <complexType>
            <sequence>
                <element name="employee" minOccurs="1" maxOccurs="9999">
                    <complexType>
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age">
                                <simpleType>
                                    <restriction base="integer">
                                        <minInclusive value="18"></minInclusive>
                                        <maxInclusive value="60"></maxInclusive>
                                    </restriction>
                                </simpleType>
                            </element>
                            <element name="salary" type="integer"></element>
                            <element name="department">
                                <complexType>
                                    <sequence>
                                        <element name="dname" type="string"></element>
                                        <element name="address" type="string"></element>
                                    </sequence>
                                </complexType>
                            </element>
                        </sequence>
                        <attribute name="no" type="string" use="required"></attribute>                    
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>    
</schema>

2.在XML中引用相应的文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 人力资源管理系统 -->
<!--链接的作用是向文档说明,我们用了Schmal文件,然后下一个属性给出引用位置-->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="hr.xsd">
    <employee no="3309">
        <name>张三</name>
        <age>31</age>
        <salary>4000</salary>
        <department>
            <dname>会计部</dname>
            <address>XX大厦-B103</address>
        </department>
    </employee>
    <employee no="3310">
        <name>李四</name>
        <age>23</age>
        <salary>3000</salary>
        <department>
            <dname>工程部</dname>
            <address>XX大厦-B104</address>
        </department>
    </employee>
</hr>


public class HrReader {
    public void readXML() {
        String file="C:\\Users\\Administrator\\eclipse-workspace\\xml\\src\\hr.xml";
        //SAXReader类是读取XML文件的核心类,用于将XML解析后以“树”的形式保存在内存中。
        SAXReader reader =new SAXReader();
        try {
            Document document=reader.read(file);
            //获取XML文档的根节点,即hr标签
            Element root=document.getRootElement();
            //elements方法用于获取指定的标签集合,把所有employee放入到employees中
            List<Element> employees=root.elements("employee");
            for(Element employee:employees) {
                //element方法用于获取唯一的子节点对象
                Element name =employee.element("name");
                String empName=name.getText();//getText()方法用于获取标签文本值
                System.out.println(empName);
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        HrReader reader =new HrReader();
        reader.readXML();
    }
}
    public void writeXML() {
         //导入xml文件
        String file="C:\\Users\\Administrator\\eclipse-workspace\\xml\\src\\hr.xml";
        SAXReader reader =new SAXReader();
        try {
            //同上
            Document document=reader.read(file);
            Element root=document.getRootElement();
            
            Element employee=root.addElement("employee");
            employee.addAttribute("no", "3311");
            
            Element name=employee.addElement("name");
            name.setText("李铁柱");
            
            employee.addElement("age").setText("36");
            employee.addElement("salary").setText("3600");
            
            Element department=employee.addElement("department");
            department.addElement("dname").setText("人事部");
            department.addElement("address").setText("XXX");
            
            //写入XML文件,因为设置好后,起始数据都是在内存中的,还要往外存中写
            Writer writer=new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
            document.write(writer);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        HrWriter hrWriter=new HrWriter();
        hrWriter.writeXML();
    }

public class XPathTestor {
    //这里是固定格式,要保证能找到所有的节点值
    public void xpath(String xpathExp){
        String file = "E:/lianxi/xml/hr.xml";
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(file);
            
            List<Node> nodes = document.selectNodes(xpathExp);
            for(Node node : nodes){
                Element emp = (Element)node;
                System.out.println(emp.attributeValue("no"));
                System.out.println(emp.elementText("name"));
                System.out.println(emp.elementText("age"));
                System.out.println(emp.elementText("salary"));
                System.out.println("==============================");
            }
            
            
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        //通过表达式在所有值中去筛选出符合表达式的
        XPathTestor testor = new XPathTestor();
//        testor.xpath("/hr/employee");
//        testor.xpath("//employee");
//        testor.xpath("//employee[salary<4000]");
//        testor.xpath("//employee[name='李铁柱']");
//        testor.xpath("//employee[@no=3304]");
//        testor.xpath("//employee[1]");
//        testor.xpath("//employee[last()]");
        //testor.xpath("//employee[position()<3]");
        testor.xpath("//employee[3] | //employee[8]");
        
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码敲上天.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值