统计
  • 建站日期:2021-03-10
  • 文章总数:518 篇
  • 评论总数:151 条
  • 分类总数:32 个
  • 最后更新:4月20日
文章 未分类

xml基础知识

梦幻书涯
首页 未分类 正文

 

#今日内容
 1。 XML   
  1.概念
  2.  语法
  3.  解析


## XML:
 1。概念:可扩展标记语言可扩展标记语言
  *可扩展:标签都是自定义的。<user> <student>

  *功能
   *存储数据
    1.  配置文件
    2.  在网络中传输
  * xml与html的区别
   1。 XML标签都是自定义的,HTML标签是预定义
   .2.xml的语法严格,HTML语法松散
   3。 XML是存储数据的,HTML是展示数据

  * w3c:万维网联盟

 2.语法:
  *基本语法:
   1.xml文档的后缀名.xml   
   2. xml第一行必须定义为文档声明
   3。 XML文档中有且仅有一个根标签
   4.  属性值必须使用引号(单双都可)引起来
   5.  标签必须正确关闭
   6。 xml标签名称区分大小写
  *快速入门:
   <?xml version ='1.0'?>   
   <users>   
    <user id ='1'>   
     <name> zhangsan </姓名>   
     <年龄> 23 </ age>   
     <性别>男性</性别>   
     <br/>   
    </ user>   
    
    <user id ='2'>   
     <name> lisi </ name>   
     <age> 24 </ age>   
     <gender> female </ gender>   
    </ user>   
   < /用户> 
   


   

     *版本:版本号,必须的属性
     *编码:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1   
     * standalone:是否独立
      *取值:
       * yes:不依赖其他文件
       *无:依赖其他文件
   2.  指令(了解):结合css的
    * <?xml-stylesheet type =“text / css”href =“a.css”?>   
   3.标签:标签名称自定义的
    *规则:
     *名称可以包含字母,数字以及其他的字符
     *名称不能以数字或者标点符号开始
     *名称不能以字母XML(或者XML,XML   
     等等)开始*名称不能包含空格

   4.属性:
    id属性值唯一
   5.  文本:
    * CDATA区:在该区域中的数据会被原样展示
     *格式:<![CDATA [数据]]>

 
  *约束:规定xml文档的书写规则
   *作为框架的使用者(程序员):
    1。能够在xml中引入约束文档
    2.  能够简单的读懂约束文档
   
   *分类:1.DTD   
    :一种简单的约束技术
    2.  模式:一种复杂的约束技术


   * DTD:
    *引入dtd文档到xml文档中
     *内部dtd:将约束规则定义在xml文档中
     *外部dtd:将约束的规则定义在外部的dtd文件中
      *本地:<!DOCTYPE根标签名SYSTEM“dtd文件的位置“>   
      *网络:<!DOCTYPE根标签名PUBLIC”dtd文件名字“”dtd文件的位置URL“>


   *架构:
    *引入:
     1。填写xml文档的根元素
     2.引入xsi前缀.xmlns  :xsi =“   http://www.w3.org/2001/XMLSchema-instance       3.引入xsd文件命名空间.xsi :schemaLocation =“ http://www.itcast.cn/xml   student.xsd”      4.为每一个xsd约束声明一个前缀,作为标识xmlns =“ http://www.itcast.cn/xml     
      
    

    <学生xmlns:xsi =“   http://www.w3.org/2001/XMLSchema-instance       xmlns =“ http://www.itcast.cn/xml       xsi:schemaLocation =“ http://www.itcast .cn / xml   student.xsd“>    
      
    
 
 

 3.解析:操作XML文档,将文档中的数据读取到内存中
  *操作XML文档
   1.  解析(读取):将文档中的数据读取到内存中
   2.  写入:将内存中的数据保存到XML文档中持久化的存储

  *解析xml的方式:
   1.DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
    *优点:操作方便,可以对文档进行CRUD的所有操作
    *缺点:占内存
   2。 SAX:逐行读取,基于事件驱动的。
    *优点:不占内存。
    *缺点:只能读取,不能增赌改


  
  * xml常见的解析器:1.JAXP:
   sun公司提供的解析器,支持dom和sax两种思想
   2。 DOM4J:一款非常优秀的解析器
   3。 Jsoup:jsoup是一款Java的HTML的解析器,可直接解析某个URL地址,HTML文本内容它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的的的操作方法来取出和操作数据
   .4PULL:安卓操作系统内置的解析器,萨克斯方式的。


  * Jsoup:jsoup是一款Java的HTML解析器,可直接解析某个URL地址,HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
   *快速入门:
    *步骤:
     1。导入罐包
     2.  获取文档对象
     3.  获取对应的标签元对象
     4.  获取数据

   *代码:
     //2.1获取student.xml的路径
          String path = JsoupDemo1.class.getClassLoader()。getResource(“student.xml”)。getPath();   
          //2.2解析xml文档,加载文档进内存,获取dom树--->文档
          文档文档= Jsoup.parse(新文件(路径),“utf-8”);   
          // 3.获取元素对象
          元素元素= document.getElementsByTag(“name”);   
  
          的System.out.println(elements.size());   
          //3.1获取第一个名称的元素对象
          元素= elements.get(0);   
          //3.2获取数据
          String name = element.text();   
          的System.out.println(名);

  *对象的使用:
   1.Jsoup:工具类,可以解析html或xml文档,返回文件
    *解析:解析html或xml文档,返回文件
     *解析(文件输入,String charsetName):解析xml或html文件的。
     * parse(String html):解析xml或html字符串
     * parse(URL url,int timeoutMillis):通过网络路径获取指定的html或xml的文档对象

 

 

 

static boolean isValid(String bodyHtml, Whitelist whitelist)
测试输入正文HTML是否仅包含白名单允许的标记和属性。
static Document parse(File in, String charsetName)
将文件的内容解析为HTML。
static Document parse(File in, String charsetName, String baseUri)
将文件的内容解析为HTML。
static Document parse(InputStream in, String charsetName,String baseUri)
读取输入流,并将其解析为文档。
static Document parse(InputStream in, String charsetName,String baseUri, Parser parser)
读取输入流,并将其解析为文档。
static Document parse(String html)
将HTML解析为文档。
static Document parse(String html, String baseUri)
将HTML解析为文档。
static Document parse(String html, String baseUri, Parser parser)
使用提供的解析器将HTML解析为文档。
static Document parse(URL url, int timeoutMillis)
获取URL,并将其解析为HTML。

 


   2.  文档:文档对象。代表内存中的dom树
    *获取元素对象
     * getElementById(String id):根据id属性值获取唯一的元素对象
     * getElementsByTag(String tagName):根据标签名称获取元素对象集合
     * getElementsByAttribute( String key):根据属性名称获取元素对象集合
     * getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合
   3.  元素:元素元素对象的集合。可以当做ArrayList <Element>来使用

 

 

 

 

 

 

 

Element getElementById(String id)
按ID查找元素,包括或在此元素下。
Elements getElementsByAttribute(String key)
查找具有命名属性集的元素。
Elements getElementsByAttributeStarting(String keyPrefix)
查找具有以提供的前缀开头的属性名称的元素。
Elements getElementsByAttributeValue(String key,String value)
查找具有特定值属性的元素。
Elements getElementsByAttributeValueContaining(String key, String match)
查找具有值包含匹配字符串的属性的元素。
Elements getElementsByAttributeValueEnding(String key, String valueSuffix)
查找具有以值后缀结尾的属性的元素。
Elements getElementsByAttributeValueMatching(String key, String regex)
查找具有值与提供的正则表达式匹配的属性的元素。
Elements getElementsByAttributeValueMatching(String key, Pattern pattern)
查找具有值与提供的正则表达式匹配的属性的元素。
Elements getElementsByAttributeValueNot(String key,String value)
查找不具有此属性的元素,或者使用不同的值。
Elements getElementsByAttributeValueStarting(String key, String valuePrefix)
查找具有以值前缀开头的属性的元素。
Elements getElementsByClass(String className)
查找具有此类的元素,包括或在此元素下。
Elements getElementsByIndexEquals(int index)
查找其兄弟索引等于提供的索引的元素。
Elements getElementsByIndexGreaterThan(int index)
查找其兄弟索引大于提供的索引的元素。
Elements getElementsByIndexLessThan(int index)
查找其兄弟索引小于提供的索引的元素。
Elements getElementsByTag(String tagName)
使用指定的标记名称查找元素,包括此元素下的递归元素。

 

 

 

 

 

 

 


   4.  元素:元素对象
    1.  获取子元素对象
     * getElementById(String id):根据id属性值获取唯一的元素对象
     * getElementsByTag(String tagName):根据标签名称获取元素对象集合
     * getElementsByAttribute(String key):根据属性名称获取元素对象集合
     * getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合

    2.获取属性值
     * String attr(String key):根据属性名称获取属性值

Element attr(String attributeKey, boolean attributeValue)
在此元素上设置布尔属性值。
Element attr(String attributeKey,String attributeValue)
在此元素上设置属性值。

  元素attr(字符串attributeKey,布尔attributeValue)
  此元素上设置一个布尔属性值.attributeKey 
  元素attr(字符串,字符串attributeValue)
  在这个元素设置一个属性值。

 


    3.  获取文本内容
     * String text():获取文本内容
     * String html():获取标签体的所有内容(包括字标签的字节串内容)

 

 


   5.节点:节点对象
    *是文档和元素的父类

   
  *快捷查询方式:
   1。选择器:选择器
    *使用的方法:元素选择(String cssQuery)
     *语法:参考选择器类中定义的语法

 


组合子

E F          来自è元素的˚F元素       div a .logo h1

div标签下的所有a,的子子孙孙标签

E > F

        

          Ë的直接孩子

      

        ol > li

ol标签下的所有a,的儿子(ol下面最接近的li)标签

 

     

 

图案 火柴
* 任何元素 *
tag 具有给定标记名称的元素 div
*|E 任何名称空间NS中的 Ë类型元素    *|name 找到元素  <fb:name>
ns|E 名称空间NS中的 Ë类型元素    fb|name 找到元素  <fb:name>
#id 属性ID为“ID”的元素 div#wrap #logo
.class 类名为“下课”的元素 div.left .result
[attr] 具有名为“ATTR”的属性的元素(具有任何值) a[href] [title]
[^attrPrefix] 属性名称以“attrPrefix”开头的元素。用于查找包含HTML5数据集的元素 [^data-] div[^data-]
[attr=val] 具有名为“ATTR”的属性的元素,以及等于“VAL”的值 img[width=500] a[rel=nofollow]
[attr="val"] 具有名为“ATTR”的属性的元素,以及等于“VAL”的值 span[hello="Cleveland"][goodbye="Columbus"] a[rel="nofollow"]
[attr^=valPrefix] 具有名为“ATTR”的属性的元素,以及以“valPrefix”开头的值 a[href^=http:]
[attr$=valSuffix] 具有名为“ATTR”的属性的元素,以及以“valSuffix”结尾的值 img[src$=.png]
[attr*=valContaining] 具有名为“ATTR”的属性的元素,以及包含“valContaining”的值 a[href*=/search/]
[attr~=regex] 具有名为“ATTR”的属性的元素,以及与正则表达式匹配的值 img[src~=(?i).(png|jpe?g)]
以上可以以任何顺序组合 div.header[title]

 

 

 

 

 

2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
    * 使用Jsoup的Xpath需要额外导入jar包。
    * 查询w3cshool参考手册,使用xpath的语法完成查询
    * 代码:
     //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对象

        //等价于:把document对象转换成JXDocument对象,

        //用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);
           }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
        Document document = Jsoup.parse(new File(path), "utf-8");
        JXDocument jxDocument = new JXDocument(document);
        List<JXNode> jxNodes = jxDocument.selN("//student//text()");
        //返回值是一个集合1个或者多个结果

        System.out.println(jxNodes);

        //返回值:  [张三 25 male 李四 24 female]

        List<JXNode> jxNodes1 = jxDocument.selN("//student/name/text()");
        //返回值:  张三 李四
        JXNode selNOne = jxDocument.selNOne("//student/name/text()");
        //返回值是一个结果 张三


        System.out.println(selNOne);
        //等价于:
        JXNode selNOne1 = jxDocument.selNOne("//student/name");
        Element element = selNOne1.getElement();
        System.out.println(element);
        //返回值:  张三
//
//        System.out.println(element);
        //返回值:  张三
        //jxNodes.
//        System.out.println("-----------------------------");
//        Element element = jxNode.getElement();
//
//        System.out.println(element);

 

 

 

 

 

 

取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式 结果
bookstore 选取 bookstore 元素的所有子节点。
/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book 选取属于 bookstore 的子元素的所有 book 元素。
//book 选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang 选取名为 lang 的所有属性。


 

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。


 

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
node() 匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。


 

选取若干路径

通过在路径表达式中使用"|"运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

 

 

 

 

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2019-8-9,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
xml语法基础代码
« 上一篇
javascript表格校验(正则表达式)html css js
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。
Array

日历

热门文章