温州建设工程招聘信息网站,站长工具seo综合查询可以访问,安装wordpress 500,怎么吧自己电脑做网站文章目录 XML组成部分约束 解析解析xml的方式xml常见的解析器Jsoup详解Jsoup 相关对象的使用#xff1a;快捷查询方式 XML
概念#xff1a;Extensible Markup Language 可扩展标记语言。
功能#xff1a;存储数据
配置文件在网络中传输
xml与html的区别#xff1a; 3. … 文章目录 XML组成部分约束 解析解析xml的方式xml常见的解析器Jsoup详解Jsoup 相关对象的使用快捷查询方式 XML
概念Extensible Markup Language 可扩展标记语言。
功能存储数据
配置文件在网络中传输
xml与html的区别 3. xml标签都是自定义的html标签是预定义。 4. xml的语法严格html语法松散 5. xml是存储数据的html是展示数据
历史 html 与 xml 都是万维网联盟w3c搞出来的最开始有的 html但是因为 html 语法结构松散后面造出的 xml 为了替换 html但是由于 html 大家已经用习惯了所以并没有被替换。而 xml 因为标签可以自定义并且语法严格所以现在多用于存储数据。
语法
基本语法
xml文档的后缀名 .xmlxml第一行必须定义为文档声明xml文档中有且仅有一个根标签属性值必须使用引号(单双都可)引起来标签必须正确关闭xml标签名称区分大小写
快速入门
?xml version1.0 ?
usersuser id1namezhangsan/nameage23/agegendermale/genderbr//useruser id2namelisi/nameage24/agegenderfemale/gender/user
/users组成部分 文档声明 格式?xml 属性列表 ?属性列表 version版本号必须的属性encoding编码方式。告知解析引擎当前文档使用的字符集默认值ISO-8859-1standalone是否独立 取值 yes不依赖其他文件no依赖其他文件 指令(了解)结合css的 ?xml-stylesheet typetext/css hrefa.css ? 标签标签名称自定义的 规则 名称可以包含字母、数字以及其他的字符名称不能以数字或者标点符号开始名称不能以字母 xml或者 XML、Xml 等等开始名称不能包含空格 属性 id属性值唯一 文本 CDATA区在该区域中的数据会被原样展示 格式 ![CDATA[ 数据 ]]
?xml version1.0 encodingutf-8 standaloneno ?
usersuser id1name张三/nameage23/agegendermale/genderbr//useruser id2namelisi/nameage24/agegenderfemale/gendercode// 不推荐if(a lt; b amp;amp; a gt; c){}// 推荐![CDATA[if(a b a c) {}]]]/code/user
/users约束
规定xml文档的书写规则 作为框架的使用者(程序员) 能够在xml中引入约束文档能够简单的读懂约束文档 分类 DTD:一种简单的约束技术【了解即可】Schema:一种复杂的约束技术 DTD 引入dtd文档到xml文档中 内部dtd将约束规则定义在xml文档中外部dtd将约束的规则定义在外部的dtd文件中 本地!DOCTYPE 根标签名 SYSTEM dtd文件的位置网络!DOCTYPE 根标签名 PUBLIC dtd文件名字 dtd文件的位置URL Schema: 引入 1.填写xml文档的根元素 2.引入xsi前缀. xmlns:xsi“http://www.w3.org/2001/XMLSchema-instance” 3.引入xsd文件命名空间. xsi:schemaLocation“http://www.xxx.cn/xml student.xsd” 4.为每一个xsd约束声明一个前缀,作为标识 xmlns“http://www.xxx.cn/xml”
举例 student.xsd
?xml version1.0?
xsd:schema xmlnshttp://www.xxx.cn/xmlxmlns:xsdhttp://www.w3.org/2001/XMLSchematargetNamespacehttp://www.xxx.cn/xml elementFormDefaultqualifiedxsd:element namestudents typestudentsType/xsd:complexType namestudentsTypexsd:sequencexsd:element namestudent typestudentType minOccurs0 maxOccursunbounded//xsd:sequence/xsd:complexTypexsd:complexType namestudentTypexsd:sequencexsd:element namename typexsd:string/xsd:element nameage typeageType /xsd:element namesex typesexType //xsd:sequencexsd:attribute namenumber typenumberType userequired//xsd:complexTypexsd:simpleType namesexTypexsd:restriction basexsd:stringxsd:enumeration valuemale/xsd:enumeration valuefemale//xsd:restriction/xsd:simpleTypexsd:simpleType nameageTypexsd:restriction basexsd:integerxsd:minInclusive value0/xsd:maxInclusive value256//xsd:restriction/xsd:simpleTypexsd:simpleType namenumberTypexsd:restriction basexsd:stringxsd:pattern valueheima_\d{4}//xsd:restriction/xsd:simpleType
/xsd:schema
使用
?xml version1.0 encodingUTF-8 ?
!-- 1.填写xml文档的根元素2.引入xsi前缀. xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance3.引入xsd文件命名空间. xsi:schemaLocationhttp://www.xxx.cn/xml student.xsd4.为每一个xsd约束声明一个前缀,作为标识 xmlnshttp://www.xxx.cn/xml --
students xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlnshttp://www.xxx.cn/xmlxsi:schemaLocationhttp://www.xxx.cn/xml student.xsd
student numberheima_0001nametom/nameage18/agesexmale/sex/student/students解析
操作xml文档将文档中的数据读取到内存中
操作xml文档 解析(读取)将文档中的数据读取到内存中写入将内存中的数据保存到xml文档中。持久化的存储
解析xml的方式
1.DOM将标记语言文档一次性加载进内存在内存中形成一颗dom树 * 优点操作方便可以对文档进行CRUD的所有操作 * 缺点占内存 2. SAX逐行读取基于事件驱动的。 * 优点不占内存。 * 缺点只能读取不能增删改
web 一般用 DOM 思想而对一些嵌入式设备则使用 SAX 思想。
xml常见的解析器
JAXPsun公司提供的解析器支持dom和sax两种思想DOM4J一款非常优秀的解析器Jsoupjsoup 是一款Java 的HTML解析器可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API可通过DOMCSS以及类似于jQuery的操作方法来取出和操作数据。PULLAndroid操作系统内置的解析器sax方式的。
Jsoup详解
Jsoupjsoup 是一款Java 的HTML解析器可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API可通过DOMCSS以及类似于jQuery的操作方法来取出和操作数据。 快速入门 步骤 导入jar包获取Document对象获取对应的标签Element对象获取数据 代码
package cn.xxx.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的pathString path JsoupDemo1.class.getClassLoader().getResource(student.xml).getPath();//2.2解析xml文档加载文档进内存获取dom树---DocumentDocument document Jsoup.parse(new File(path), utf-8);//3.获取元素对象 ElementElements 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);}}
Jsoup 相关对象的使用
Jsoup工具类可以解析html或xml文档返回Document parse解析html或xml文档返回Document parse(File in, String charsetName)解析xml或html文件的。parse(String html)解析xml或html字符串parse(URL url, int timeoutMillis)通过网络路径获取指定的html或xml的文档对象 Document文档对象。代表内存中的dom树 获取Element对象 getElementById(String id)根据id属性值获取唯一的element对象getElementsByTag(String tagName)根据标签名称获取元素对象集合getElementsByAttribute(String key)根据属性名称获取元素对象集合getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象集合 Elements元素Element对象的集合。可以当做 ArrayList来使用Element元素对象 获取子元素对象 getElementById(String id)根据id属性值获取唯一的element对象getElementsByTag(String tagName)根据标签名称获取元素对象集合getElementsByAttribute(String key)根据属性名称获取元素对象集合getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象集合 获取属性值 String attr(String key)根据属性名称获取属性值 获取文本内容 String text():获取文本内容String html():获取标签体的所有内容(包括字标签的字符串内容) Node节点对象 是Document和Element的父类
示例
package cn.xxx.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的pathString 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\ ?\n \n students\n \tstudent number\heima_0001\\n \t\tnametom/name\n \t\tage18/age\n \t\tsexmale/sex\n \t/student\n \tstudent number\heima_0002\\n \t\tnamejack/name\n \t\tage18/age\n \t\tsexfemale/sex\n \t/student\n \n /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?fraladdin);//代表网络中的一个资源路径Document document Jsoup.parse(url, 10000);System.out.println(document);}}
package cn.xxx.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的pathString 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 xxx document.getElementById(xxx);System.out.println(xxx);}}
package cn.xxx.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的pathString 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);}}
快捷查询方式
selector:选择器和js中的id/类选择器差不多 使用的方法Elements select(String cssQuery) 语法参考Selector类中定义的语法 XPathXPath即为XML路径语言它是一种用来确定XML标准通用标记语言的子集文档中某部分位置的语言 使用Jsoup的Xpath需要额外导入jar包。查询w3cshool参考手册使用xpath的语法完成查询
package cn.xxx.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的pathString 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值为xxx的元素Elements elements1 document.select(#xxx);System.out.println(elements1);System.out.println(----------------);//5.获取student标签并且number属性值为heima_0001的age子标签//5.1.获取student标签并且number属性值为heima_0001Elements 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);}}
package cn.xxx.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的pathString 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标签ListJXNode jxNodes jxDocument.selN(//student);for (JXNode jxNode : jxNodes) {System.out.println(jxNode);}System.out.println(--------------------);//4.2查询所有student标签下的name标签ListJXNode jxNodes2 jxDocument.selN(//student/name);for (JXNode jxNode : jxNodes2) {System.out.println(jxNode);}System.out.println(--------------------);//4.3查询student标签下带有id属性的name标签ListJXNode jxNodes3 jxDocument.selN(//student/name[id]);for (JXNode jxNode : jxNodes3) {System.out.println(jxNode);}System.out.println(--------------------);//4.4查询student标签下带有id属性的name标签 并且id属性值为xxxListJXNode jxNodes4 jxDocument.selN(//student/name[idxxx]);for (JXNode jxNode : jxNodes4) {System.out.println(jxNode);}}}