打开网页时网站顶部显示广告随后消失的广告怎么做,wordpress去除分类,网站建设建设公司有哪些,做百度手机网站点击软文章目录1 概念2 语法2.1 基本语法2.2 组成部分2.3 约束2.3.1 使用DTD约束2.3.2 使用Schema约束3 解析3.1 将文档中的数据读到内存3.2 XML常见的解析器4 Jsoup4.1 使用Jsoup4.2 对象的使用4.2.1 Jsoup对象4.2.2 Document对象4.2.3 Element对象4.3 快捷查询方式4.3.1 selector选…
文章目录1 概念2 语法2.1 基本语法2.2 组成部分2.3 约束2.3.1 使用DTD约束2.3.2 使用Schema约束3 解析3.1 将文档中的数据读到内存3.2 XML常见的解析器4 Jsoup4.1 使用Jsoup4.2 对象的使用4.2.1 Jsoup对象4.2.2 Document对象4.2.3 Element对象4.3 快捷查询方式4.3.1 selector选择器4.3.2 XPath1 概念
Extensible Markup Language 可扩展标记语言
可扩展标签都是自定义的
功能存储数据
配置文件在网络中传输
xml和html的区别
xml的标签都是自定义的 html的标签都是预定义的xml语法严格 html语法松散xml是存储数据的 html是展示数据的
2 语法
2.1 基本语法
后缀名是.xml第一行必须定义为文档声明?xml version1.0 encodingutf-8 ?xml中有且仅有1个根标签属性值必须使用引号引起来标签必须有结束xml标签区分大小写
2.2 组成部分
文档声明?xml 属性列表 ? 属性列表version版本号、encoding编码方式默认ISO-8859-1、standalone是否独立yes’不依赖其他文件/no’依赖其他文件指令结合css控制样式了解?xml-stylesheet typetext/css href#.css ?标签名称自定义。数字、标点不能开头名称不能以xml开头名称不能包含空格。属性id属性唯一文本CDATA区在这个区域的内容会原样展示 ! [ CDATA [ 展示数据 ] ]
2.3 约束
约束规定xml文档的书写规则 目标在xml中引入约束文档读懂约束文档
分类
DTD一种简单的约束技术Schema一种复杂的约束技术
2.3.1 使用DTD约束
将dtd文档引入xml文档 -!DOCTYPE 根标签名 SYSTEM dtd文件位置
!ELEMENT students (student*)
!--根标签是students *表示子标签student可以出现多次--
!ELEMENT student (name,age,sex)
!--student有三个子标签可以出现1次--
!ELEMENT name (#PCDATA)
!--子标签的数据类型是PCDATA--
!ELEMENT age (#PCDATA)
!ELEMENT sex (#PCDATA)
!ATTLIST student number ID #REQUIRED
!--student必须有id--?xml version1.0 encodingUTF-8 ?
!DOCTYPE students SYSTEM student.dtdstudentsstudent numberitcast_0001nametom/nameage18/agesexmale/sex/student
/students2.3.2 使用Schema约束
可以约束标签的属性值 引入约束首先填写根标签然后引入xsi前缀引入xsd文件命名空间给每个xsd约束声明一个前缀作为标识
3 解析
3.1 将文档中的数据读到内存
操作xml文档将文档中的数据读取到内存中
解析XML的方式服务端一般用DOM 移动端一般用SAX
DOM : 将标记语言文档一次性加载进内存在内存中形成一棵DOM树。 优点操作方便可以对文档进行CRUD的所有操作 缺点消耗内存SAX逐行读取基于事件驱动的。读一行释放一次。 优点不占内存 缺点只能读取不能增删改
3.2 XML常见的解析器
JAXPSUN公司提供的解析器支持DOM和SAX两种思想DOM4JJsoup是一款HTML解析器通过DOMCSS以及类似于jQuery的操作方法来取出和操作数据。可以直接解析URL地址和HTML文本内容PULL安卓OS内置的解析器使用SAX方式。
4 Jsoup
4.1 使用Jsoup
导入jar包获取Document对象获取对应的标签Element对象获取数据 public static void main(String[] args) throws IOException {//获取xml的pathString path JsoupDemo.class.getClassLoader().getResource(student.xml).getPath();System.out.println(path);/*E:/JavaLearn/project/JavaScript/out/production/JavaScript/student.xml*///解析xml文档 加载文档进内存 获取dom树Document document Jsoup.parse(new File(path), utf-8);//获取Element元素对象Elements elements document.getElementsByTag(name);//获取第一个name的element对象Element element elements.get(0);String name element.text();System.out.println(name);}4.2 对象的使用
主要对象
Jsoup是一个工具类可以解析html或xml文档返回Document对象Document是文档对象代表内存中的DOM树Elements是元素Element对象的集合可以当作ArrayListElement来使用Element是元素对象可以获取元素的属性和文本等Node是节点对象是以上对象的父亲。
4.2.1 Jsoup对象
Jsoup主要方法
Jsoup.parse(File in, String charset) 用来解析html和xml文档返回Document对象参数是XML或HTML文件Jsoup.parse(String html) 可以解析xml或html格式的字符串返回DOM对象Jsoup.parse(URL url, int timeoutMills) 通过网络获取指定的html或xml文档对象
爬虫解析HTML时常用 public static void main(String[] args) throws IOException {URL url new URL(https://www.baidu.com);Document parse Jsoup.parse(url, 10000);System.out.println(parse);}4.2.2 Document对象
getElementById(String id)根据id属性值获取唯一的element对象getElementsByTag(String name)根据标签名获取元素对象的集合getElementsByAttribute(String key)根据属性名称获取元素对象的集合getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象
4.2.3 Element对象
获取子元素对象
getElementById(String id)根据id属性值获取唯一的element对象getElementsByTag(String name)根据标签名获取元素对象的集合getElementsByAttribute(String key)根据属性名称获取元素对象的集合getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象
获取属性值
String attr(String key)根据属性名称获取属性值
获取文本内容
String text()获取文本内容String html()获取标签体的所有内容 包括子标签的字符串内容 public static void main(String[] args) throws IOException {String path JsoupDemo.class.getClassLoader().getResource(student.xml).getPath();Document document Jsoup.parse(new File(path), UTF8);//通过DOM对象获取name标签 可以获取所有的name标签Elements elements document.getElementsByTag(name);System.out.println(elements.size());//通过ELement对象获取name标签Element student document.getElementsByTag(student).get(0);//第一个标签//通过Element对象获取子标签对象Elements name student.getElementsByTag(name);System.out.println(name.size());//获取student的属性值String number student.attr(number);System.out.println(number);//获取文本内容String text elements.text();System.out.println(text);//仅获取文本System.out.println(elements.html());//获取子标签和文本}4.3 快捷查询方式
4.3.1 selector选择器
Elements select(String cssQuery)语法参考selector类的文档 public static void main(String[] args) throws IOException {String path JsoupDemo.class.getClassLoader().getResource(student.xml).getPath();Document document Jsoup.parse(new File(path), UTF8);//查询name标签Elements name document.select(name);//标签选择器System.out.println(name\n);//查询id值为XXX的元素Elements select document.select(#smalltom);System.out.println(select\n);//获取student标签并且number属性值为 001 的age子标签Elements select1 document.select(student[number001]);//1. 获取student标签并且number属性值为 001System.out.println(select1\n);//2. 获取001的student标签子标签Elements select2 document.select(student[number001] age);System.out.println(select2);}4.3.2 XPath
XML路径语言用来确定XML文档中查找信息的语言 对DOM树形结构进行操作 需要导入JsoupXpath的jar包 查询w3cshool的参考手册区使用XPath的语法进行查询 public static void main(String[] args) throws IOException, XpathSyntaxErrorException {String path JsoupDemo.class.getClassLoader().getResource(student.xml).getPath();Document document Jsoup.parse(new File(path), UTF8);//根据DOM对象创建JXDocumentJXDocument jxDocument new JXDocument(document);//查询所有student标签ListJXNode jxNodes jxDocument.selN(//student);System.out.println(jxNodes\n);//查询所有student标签下的所有name标签ListJXNode jxNodes1 jxDocument.selN(//student/name);System.out.println(jxNodes1\n);//查询所有student标签下带id属性的name标签ListJXNode jxNodes2 jxDocument.selN(//student/name[id]);System.out.println(jxNodes2\n);//查询所有student标签下带id属性的name标签 且属性值为XXXListJXNode jxNodes3 jxDocument.selN(//student/name[idXXX]);System.out.println(jxNodes3);}