zoukankan      html  css  js  c++  java
  • XML约束schema和Jsoup使用

    创建约束规则

    <?xml version="1.0"?>
    <xsd:schema xmlns="http://www.itcast.cn/xml"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.itcast.cn/xml" elementFormDefault="qualified">
    
    
        <!--为跟结点student设置根约束-->
        <xsd:element name="students" type="studentsType"/>
    
    
        <xsd:complexType name="studentsType">
            <xsd:sequence>
                <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    
    
        <!--为nage,age,sex,number设定格式-->
        <xsd:complexType name="studentType">
            <xsd:sequence>
                <xsd:element name="name" type="xsd:string"/>
                <xsd:element name="age" type="ageType" />
                <xsd:element name="sex" type="sexType" />
            </xsd:sequence>
            <xsd:attribute name="number" type="numberType" use="required"/>
        </xsd:complexType>
    
    
        <xsd:simpleType name="sexType">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="male"/>
                <xsd:enumeration value="female"/>
            </xsd:restriction>
        </xsd:simpleType>
    
    
        <xsd:simpleType name="ageType">
            <xsd:restriction base="xsd:integer">
                <xsd:minInclusive value="0"/>
                <xsd:maxInclusive value="256"/>
            </xsd:restriction>
        </xsd:simpleType>
    
        <xsd:simpleType name="numberType">
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="heima_d{4}"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:schema> 
    
    

    创建 student.xml,使用了上面的约束

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 
    	1.填写xml文档的根元素
    	2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	3.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml"
    	4.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
    
    	
     -->
    <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    			xmlns="http://www.itcast.cn/xml"
    			xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
    >
    	<student number="heima_0001">
    		<name>tom</name>
    		<age>18</age>
    		<sex>male</sex>
    	</student>
    
    </students>
    

    2 Jsoup的使用

    2-1 Jsoup简单入门

    package cn.itcast.xml.jsoup;
    
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     * Jsoup快速入门
     */
    public class JsoupDemo1 {
        public static void main(String[] args) throws IOException {
            //2.获取Document对象,根据xml文档获取
            //2.1获取student.xml的path
            String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
            //2.2解析xml文档,加载文档进内存,获取dom树--->Document
            Document document = Jsoup.parse(new File(path), "utf-8");
            //3.获取元素对象 Element
            Elements elements = document.getElementsByTag("name");
    
            System.out.println(elements.size());
            //3.1获取第一个name的Element对象
            Element element = elements.get(0);
            //3.2获取数据
            String name = element.text();
            System.out.println(name);
        }
    
    }
    
    

    2-2 Jsoup可以解析的类型

    • File文档
    • html/xml
      -网络的URL
    package cn.itcast.xml.jsoup;
    
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    /**
     * Jsoup对象功能
     */
    public class JsoupDemo2 {
        public static void main(String[] args) throws IOException {
            //2.1获取student.xml的path
            String path = JsoupDemo2.class.getClassLoader().getResource("student.xml").getPath();
            //2.2解析xml文档,加载文档进内存,获取dom树--->Document
           /* Document document = Jsoup.parse(new File(path), "utf-8");
            System.out.println(document);*/
    
           //2.parse​(String html):解析xml或html字符串
           /* String str = "<?xml version="1.0" encoding="UTF-8" ?>
    " +
                    "
    " +
                    "<students>
    " +
                    "	<student number="heima_0001">
    " +
                    "		<name>tom</name>
    " +
                    "		<age>18</age>
    " +
                    "		<sex>male</sex>
    " +
                    "	</student>
    " +
                    "	<student number="heima_0002">
    " +
                    "		<name>jack</name>
    " +
                    "		<age>18</age>
    " +
                    "		<sex>female</sex>
    " +
                    "	</student>
    " +
                    "
    " +
                    "</students>";
            Document document = Jsoup.parse(str);
            System.out.println(document);*/
    
           //3.parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
            URL url = new URL("https://baike.baidu.com/item/jsoup/9012509?fr=aladdin");//代表网络中的一个资源路径
            Document document = Jsoup.parse(url, 10000);
            System.out.println(document);
    
        }
    
    }
    
    

    2-3 Jsoup得到document/element对象

    package cn.itcast.xml.jsoup;
    
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    
    /**
     * Document/Element对象功能
     */
    public class JsoupDemo3 {
        public static void main(String[] args) throws IOException {
            //1.获取student.xml的path
            String path = JsoupDemo3.class.getClassLoader().getResource("student.xml").getPath();
            //2.获取Document对象
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //3.获取元素对象了。
            //3.1获取所有student对象
            Elements elements = document.getElementsByTag("student");
            System.out.println(elements);
    
            System.out.println("-----------");
    
    
            //3.2 获取属性名为id的元素对象们
            Elements elements1 = document.getElementsByAttribute("id");
            System.out.println(elements1);
            System.out.println("-----------");
            //3.2获取 number属性值为heima_0001的元素对象
            Elements elements2 = document.getElementsByAttributeValue("number", "heima_0001");
            System.out.println(elements2);
    
            System.out.println("-----------");
            //3.3获取id属性值的元素对象
            Element itcast = document.getElementById("itcast");
            System.out.println(itcast);
        }
    
    }
    
    

    2-4 element对象功能

    package cn.itcast.xml.jsoup;
    
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     *Element对象功能
     */
    public class JsoupDemo4 {
        public static void main(String[] args) throws IOException {
            //1.获取student.xml的path
            String path = JsoupDemo4.class.getClassLoader().getResource("student.xml").getPath();
            //2.获取Document对象
            Document document = Jsoup.parse(new File(path), "utf-8");
            /*
            Element:元素对象
    				1. 获取子元素对象
    					* getElementById​(String id):根据id属性值获取唯一的element对象
    					* getElementsByTag​(String tagName):根据标签名称获取元素对象集合
    					* getElementsByAttribute​(String key):根据属性名称获取元素对象集合
    					* getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合
    
    				2. 获取属性值
    					* String attr(String key):根据属性名称获取属性值
    				3. 获取文本内容
    					* String text():获取所有字标签的纯文本内容
    					* String html():获取标签体的所有内容(包括子标签的标签和文本内容)
    
    
    
    
             */
            //通过Document对象获取name标签,获取所有的name标签,可以获取到两个
            Elements elements = document.getElementsByTag("name");
            System.out.println(elements.size());
            System.out.println("----------------");
            //通过Element对象获取子标签对象
            Element element_student = document.getElementsByTag("student").get(0);
            Elements ele_name = element_student.getElementsByTag("name");
            System.out.println(ele_name.size());
    
            //获取student对象的属性值
            String number = element_student.attr("NUMBER");
            System.out.println(number);
            System.out.println("------------");
            //获取文本内容
            String text = ele_name.text();
            String html = ele_name.html();
            System.out.println(text);
            System.out.println(html);
        }
    
    }
    
    

    2-5 选择器的查询

    package cn.itcast.xml.jsoup;
    
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    
    /**
     *选择器查询
     */
    public class JsoupDemo5 {
        public static void main(String[] args) throws IOException {
            //1.获取student.xml的path
            String path = JsoupDemo5.class.getClassLoader().getResource("student.xml").getPath();
            //2.获取Document对象
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //3.查询name标签
            /*
                div{
    
                }
             */
            Elements elements = document.select("name");
            System.out.println(elements);
            System.out.println("=----------------");
            //4.查询id值为itcast的元素
            Elements elements1 = document.select("#itcast");
            System.out.println(elements1);
            System.out.println("----------------");
            //5.获取student标签并且number属性值为heima_0001的age子标签
            //5.1.获取student标签并且number属性值为heima_0001
            Elements elements2 = document.select("student[number="heima_0001"]");
            System.out.println(elements2);
            System.out.println("----------------");
    
            //5.2获取student标签并且number属性值为heima_0001的age子标签
            Elements elements3 = document.select("student[number="heima_0001"] > age");
            System.out.println(elements3);
    
        }
    
    }
    
    

    2-6 Xpath语法查询

    package cn.itcast.xml.jsoup;
    
    
    import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
    import cn.wanghaomiao.xpath.model.JXDocument;
    import cn.wanghaomiao.xpath.model.JXNode;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    /**
     *XPath查询
     */
    public class JsoupDemo6 {
        public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
            //1.获取student.xml的path
            String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath();
            //2.获取Document对象
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //3.根据document对象,创建JXDocument对象
            JXDocument jxDocument = new JXDocument(document);
    
            //4.结合xpath语法查询
            //4.1查询所有student标签
            List<JXNode> jxNodes = jxDocument.selN("//student");
            for (JXNode jxNode : jxNodes) {
                System.out.println(jxNode);
            }
    
            System.out.println("--------------------");
    
            //4.2查询所有student标签下的name标签
            List<JXNode> jxNodes2 = jxDocument.selN("//student/name");
            for (JXNode jxNode : jxNodes2) {
                System.out.println(jxNode);
            }
    
            System.out.println("--------------------");
    
            //4.3查询student标签下带有id属性的name标签
            List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]");
            for (JXNode jxNode : jxNodes3) {
                System.out.println(jxNode);
            }
            System.out.println("--------------------");
            //4.4查询student标签下带有id属性的name标签 并且id属性值为itcast
    
            List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']");
            for (JXNode jxNode : jxNodes4) {
                System.out.println(jxNode);
            }
        }
    
    }
    
    
  • 相关阅读:
    Android 应用程序集成FaceBook 登录及二次封装
    Android MVP 设计模式
    java 接口的作用和好处
    Android版本和API Level对应关系
    Android 开源库和项目 2
    高效开发iOS系列 -- 那些不为人知的KVC
    HDU 1019 Least Common Multiple 数学题解
    程序猿喜欢如何的职位描写叙述?
    从零開始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程
    Spring ORM数据訪问——Hibernate
  • 原文地址:https://www.cnblogs.com/hellosiyu/p/12491667.html
Copyright © 2011-2022 走看看