java中xml知识点总结

1.dtd文件的作用

        xml只要按照键值对编写,就可以随意编写,但是当我们使用某个框架的时候就不能随意编写,否则就会和框架要求的不一样,导致出错,这时候我们就需要编写一个规则来进行限制,只能使用我规则提供的元素,总之,dtd就是一个规则文件

例如data.dtd文件内容

<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

xml中使用

<?xml version="1.0" encoding="UTF-8" ?
<!--导入data.dtd-->
<!DOCTYPE 书架 SYSTEM "data.dtd">
<书架>
    <书>
        <书名>人性的弱点</书名>
        <作者>卡耐基</作者>
        <售价>30</售价>
    </书>
    <书>
        <书名>平凡的世界</书名>
        <作者>路遥</作者>
        <售价>30</售价>
    </书>
</书架>

2.schema的使用

schema和dtd同为规则文件,但是供能更加强大一些,可以限制元素值的类型,目前流行的框架如spring,mybatis的配置文件均使用schema来作为规则文件

schema文件内容data.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.xunyhicao.cn"
        elementFormDefault="qualified" >
    <!-- targetNamespace:申明约束文档的地址(命名空间)-->
    <element name='书架'>
        <!-- 写子元素 -->
        <complexType>
            <!-- maxOccurs='unbounded': 书架下的子元素可以有任意多个!-->
            <sequence maxOccurs='unbounded'>
                <element name='书'>
                    <!-- 写子元素 -->
                    <complexType>
                        <sequence>
                            <element name='书名' type='string'/>
                            <element name='作者' type='string'/>
                            <element name='售价' type='double'/>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

schema文件在xml中的使用

<?xml version="1.0" encoding="UTF-8" ?>
<!--导入schema文件-->
<书架 xmlns="http://www.itcast.cn"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.xunyhicao.cn data.xsd">
    <书>
        <书名>神雕侠侣</书名>
        <作者>金庸</作者>
        <售价>300</售价>
    </书>
</书架>

3.dom4j操作xml文件

dom4j的下载链接

链接:https://pan.baidu.com/s/1Ng1lIU2KB4jGJ5bmVWL5Ug
提取码:ncd4

xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book id="0001" desc="我是第一本书">
        <name>     JavaWeb开发教程</name>
        <author> 张孝祥    </author>
        <sale>100.00元</sale>
    </book>
    <book id="0002">
        <name>三国演义</name>
        <author>罗贯中</author>
        <sale>100.00元</sale>
    </book>
    <sql>
        select * from user where age >= 18
    </sql>
</books>

dom4j读取的演示代码

public static void dom4jReadXml() throws DocumentException {
    SAXReader saxReader = new SAXReader();
    //将文档加载进document对象中
    Document document = saxReader.read(Dom4jHelloWorldDemo1.class.getResourceAsStream("/books.xml"));
    //获取根节点books
    Element root = document.getRootElement();
    //获取根节点下的book节点
    Element bookEle = root.element("book");
    //获取book节点下的name节点的元素值
    String name = bookEle.elementTextTrim("name");
    System.out.println(name);   //JavaWeb开发教程
    //获取id属性的值
    String id = bookEle.attributeValue("id");
    System.out.println(id);

    //获取根节点下的所有的book子节点
    List<Element> bookEles = root.elements("book");
    for (Element ele : bookEles) {
        //JavaWeb开发教程
        //三国演义
        System.out.println(ele.elementTextTrim("name"));
    }
}

4.xpath读取xml文件

jaxen下载链接

链接:https://pan.baidu.com/s/1LJwFOs4323Cpn9UUtxA_WQ
提取码:lgto

xpath依赖的dom4j,所以使用xpath也需要将demo4j导入,xml还是使用上文的,演示代码如下

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

        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(XPathDemo.class.getResourceAsStream("/books.xml"));
        //直接定位到name元素
        List<Node> nodes = document.selectNodes("/books/book/name");
        for (Node node : nodes) {
            Element ele = (Element) node;
            //            JavaWeb开发教程
//                    三国演义
            System.out.println(ele.getTextTrim());
        }


        //搜索所有的id属性
        List<Node> nodes1 = document.selectNodes("//@id");
        for (Node node : nodes1) {
            //0001
            //0002
            Attribute attr = (Attribute) node;
            System.out.println(attr.getValue());
        }
    }

至此,java中xml的知识讲解完毕,有问题的可以在下面评论,相互学习,我是心哥说编程,致力于成为一个编程大牛编程爱好者。

猜你喜欢

转载自blog.csdn.net/Trybravely/article/details/121437490