美文网首页
JavaWeb (day6)

JavaWeb (day6)

作者: 定格r | 来源:发表于2019-04-15 22:02 被阅读0次

    1.schema 约束

    1.dtd 语法:

    <!ELEMENT 元素名称 约束>
    

    2.schema符合 xml 的语法,xml 语句
    3.一个 xml 中可以有多个 schema,多个 schema 使用名称空间区分(类似于 java 包名)
    4.dtd 里面有 PCDATA 类型,但是在 schema 里面可以支持更多的数据类型
    ——比如 年龄只能是整数,在 schema 可以定义一个整数类型

    2.schema 的快速入门

    1.创建一个 schema 文件 后缀名是 .xsd
    根节点<schema>
    2.在 schema 文件里面
    属性: xmlns=“http://www.w3.org/2001/XMLSchema
    ——表示当前 xml 文件是一个约束文件
    targetNamespace=“http://www.itcast.cn/20151111
    ——使用 Schema 约束文件,直接通过这个地址引入约束文件
    elementFormDefault=“qualified”

    步骤:

    (1)看 xml 中有多少个元素
    <element>
    (2) 看简单元素和复杂元素
    如果复杂元素

    <complexType>
                        <sequence>
                                 子元素
                          </sequence>
    </complexType>
    

    (3)简单元素,写在复杂元素的

    <complexType>
                        <sequence>
                                <element name="name"  type="String"></element>
                                <element name="age"  type="int"></element>
                          </sequence>
    </complexType>
    

    (4)在被约束文件里面引入约束文件

    <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.itcast.cn/20151111 "
    xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    ——表示 xml 是一个被约束文件
    
    xmlns="http://www.itcast.cn/20151111 "
    ——是约束文档里面   targetNamespace
    
    xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
    —— targetNamespace 空格 约束文档的地址路径
    
    • <sequence >:表示元素出现的顺序
    • <all> :元素只能出现一次
    • <choice>:元素只能出现其中的一个
      maxOccurs=“unbounded”:表示元素出现的次数
    • <any></any> :表示任意元素
      可以约束属性
      写在复杂元素里面
      写在 </complexType>之前
    <attribute name="id1" type="int" use="required" ></attribute>
    
    • name:属性名称
    • type :属性类型
    • use:属性是否必须要出现 required 表示必须要出现

    3.使用 dom4j 解析 xml

    • dom4j ,是一个组织,针对 xml 解析,提供解析器 dom4j
    • dom4 j 不是 javase 的一部分,想要使用第一步需要怎么做?

    1.创建一个文件夹 lib
    2.复制 jar 包 到lib下面,
    3.右键点击 jar包,build path -- add to buildpath
    4.看到 jar 包,变成奶瓶样子,表示导入成功

    • 得到 document
    SAXReader reader=new SAXReader();
    Document document=reader.read(url);
    
    • document 的父接口是 Node
      ——如果在document 里面找不到想要的方法,到 Node 里面去找

    • document 里面的方法getRootElement():
      获取根节点,返回的是 Element

    • Element 也是一个接口,父接口是Node
      Element 和 Node 里面方法
      -- getparent():获取父节点
      -- addElement:添加标签

    1.element(qname)
    表示获取标签下面的第
    一个子标签
    qname:标签的名称
    2.elements(qname)
    获取标签下面是这个名称的所有子标签(一层)
    qname:标签名称
    3.elements():获取标签下面的所有的一层子标签

    4.使用 dom4j 查询 xml

    查询所有name 元素里面的值

    步骤:

    1.创建解析器
    2.得到document
    3.得到根节点
    4.得到 p1
    5.得到 p1下面的 name
    6.得到 name 里面的值

    //创建解析器
    SAXReader saxReader=new SAXReader();
    //得到 document
    Document document=saxReader.read(“src/p1.xml”);
    //得到根节点
    Element root=document.getRootElement();
    //得到 p1
    List<Element> list=root.elements(“p1”);
     //遍历 list
    for(Element  element:list){
    //element 是每一个 p1 元素
    //得到 p1下面的 name
    Element name1=element.element("name");
    //得到 name 里面的值
    String s=name1.getText();
    System.out.println(s);
    }
    

    5.使用 dom4j实现在末尾添加

    步骤:

    1.创建解析器
    2.得到 document
    3.得到根节点
    4.获取到第一个 p1
    5.在 p1下面添加元素
    6.在添加完成之后的元素下面添加文本
    7.回写 xml

    代码:

    //创建解析器
    SAXReader saxReader=new SAXReader();
    //得到 document
    Document document=saxReader.read(“src/p1.xml”);
    //得到根节点
    Element root=document.getRootElement();
    //得到第一个p1 元素
    Element   p1  =root.element(“p1”);
    //在 p1下面直接添加元素
    Element sex1=p1.addElement(“sex”);
    //在 sex 下面添加文本
    sex1.setText(“nv”);
    //回写
    OutputFormat format=OutputFormat.createPrettyPrint();
     XMLWrite xmlwrite=new XMLWrite(new FileOutputStream(“src/p1.xml”),format);
    xmlwrite.write(document);
    xmlwriter.close();
    

    6.使用 dom4j实现在特定位置添加节点

    步骤:

    1.创建解析器
    2.得到 document
    3.得到根节点
    4.获取到第一个 p1

    Element   p1  =root.element(“p1”)
    

    5.获取到 p1下面的所有元素

    List<Element> list=p1.elements();
    

    6.创建元素

    Element school =DocumentHelper.createElement("school");
    

    7.创建文本

    school.setText("ecit");
    

    8.在特定位置添加

    list.add(1,school);
    

    9.回写 xml

    7.使用 dom4j 实现修改操作

    步骤:

    1.得到第一个根节点

    Element root=document.getRootElement();
    

    2.得到第一个p1

    Element   p1  =root.element(“p1”);
    

    3.得到 p1下面的age

    Element  age =p1.element(“age”);
    

    4.修改 age 的值

    age.setText("300");//修改<age>值</age>
    

    8.使用 domj 实现删除节点的操作

    步骤:

    1.得到第一个根节点

    Element root=document.getRootElement();
    

    2.得到第一个p1

    Element   p1  =root.element(“p1”)
    

    3.得到 p1下面的 school

    Element  sch=p1.element(“school”);
    p1.remove(sch); //删除 sch 节点
    

    9.使用 domj 获取属性的操作

    步骤:

    1.得到 document
    2.得到根节点
    3.得到第一个 p1元素
    4.得到 p1 里面的属性值

    String value=p1.attributeValue("id1");
    

    10.使用 dom4j 支持XPath 的操作

    可以直接获取到某个元素

    • 第一种形式

    /AAA/DDD/BBB:表示一层一层的,AAA 下面的 DDD 下面的 BBB

    • 第二种形式

    /BBB:表示和这个名称相同,表示只要名称是 BBB ,都能得到

    • 第三种形式

    /*: 表示所有元素

    • 第四种形式

    BBB[1]:表示第一个 BBB 元素
    BBB[last()] : 表示最后一个BBB 元素

    • 第五种形式

    BBB[@id]:表示只要BBB 上面有 id 属性,都得到

    • 第六周形式

    //BBB[@id="b1"]:表示元素名称是 BBB,在BBB 上面有 id 属性,并且 id 的属性值是 b1

    11.用 dom4j 支持XPath 的具体操作

    1.默认情况下,dom4j 不支持 XPath

    2.如果想要在 dom4j 里面有 Xpath
    第一步需要,引入支持 xpath 的jar 包,使用 jaxen-1.1-beta-6.jar
    需要把 jar 包导入到项目中
    3.在 dom4j 里面提供了两个方法,用来支持 xpath
    selecNodes("xpath 表达式)
    ——获取多个节点
    selectSingleNode("xpath 表达式")

    ——获取一个节点
    4.使用 xpath 实现:查询xml 中所有name 的值

    使用 selectNodes(“//name”);

    步骤:

    1.得到 domcument
    2.使用 selectNodes(“//name”)方法得到所有的 name 值

    List<Node> list=document. selectNodes(“//name”);
    //遍历 list 集合
    for(Node node:list){  //node 是每一个name 元素
    String s=node.getText();
    Saystem.out.print(s);
    }
    

    相关文章

      网友评论

          本文标题:JavaWeb (day6)

          本文链接:https://www.haomeiwen.com/subject/klfpwqtx.html