zoukankan      html  css  js  c++  java
  • XML中的XPATH和DTD

    大家好,乐字节小乐又来了,上次给大家说道的是XML解析,这次接着讲述XML文档中的语言:XPATH、DTD

     

    一、先来说说XPATH

    1、XPATH 概念

    XPath 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。XPath 非常类似对数据库操作的 SQL 语言,或者说 JQuery,它可以方便开发者抓起文档中需要的东西。(dom4j 也支持 xpath)

    2.节点类型

    XPath 中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点 (或称为根节点)。

    文档中存在元素节点,属性节点,根节点

    3.常用路径表达式

    表达式 描述

    节点名称(nodename) 选取此节点的所有子节点

    / 从根节点选取

    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

    . 选取当前节点

    .. 选取当前节点的父节点

    @ 选取属性

     

    示例如下:

    //@lang 选取所有名为 lang 的属性

     

    4.限定语

    用来查找某个特定的节点或者包含某个指定的值的节点。以方括号括起

    //book[price>35.00] 选择所有 book 元素,且其中的 price 元素的值须大于 35.00 
    /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。

    5 .通配符

    通配符 描述

    * 匹配任何元素节点

    @* 匹配任何属性节点

    node() 匹配任何类型的节点

    | 选取若干路径

     

    使用示例

    路径表达式 结果

    /bookstore/* 选取 bookstore 元素的所有子节点
    //* 选取文档中的所有元素 
    //title[@*] 选取所有带有属性的 title 元素。 
    //book/title | //book/price 选取所有 book 元素的 tilte 和 price 元素。 
    //title | //price 选取所有文档中的 title 和 price 元素。 
    /bookstore/book/title | //price 选取所有属于 bookstore 元素的 book 元素的 title 元素,以及文档中所有的 price 元素

     

    二、再说DTD

    使用 DTD 可以对文档的内容进行约束,XML 中的 DTD 数据必须用<!DOCTYPE>标记说

    明,语法格式如下:

    <!DOCTYPE 根元素名称[DTD 定义数据]>

    XML 的元素内容定义格式如下:

    <!ELEMENT 元素内容描述字符串>

    DTD 还可以描述子元素的结构,其使用语法:

    <!ELEMENT 子元素结构名称 子元素结构表达式>

     

    其中子元素结构有以下几种常用的定义方式:

    1.按顺序包括 B、C、D、的所有内容: <!ELEMENT A(B,C,D)>

    2.在 A 中要包含 B、C、D、的任意一个的内容: <!ELEMENT A(B|C|D)>

    3.在 A 中包含 0-1 个 B: <!ELEMENT A(B?)>

    4.在 A 中要包含 1 次以上各 B: <!ELEMENT A(B+)>

    5.在 A 中要包含 O 次以上各 B: <!ELEMENT A(B*)>

    6.空元素 <!ELEMENT A EMPTY>

    如:

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE persons[ 
    <!ELEMENT persons (person+)> 
    <!ELEMENT person ( name , password? , age+) > 
    <!ATTLIST person sex (男|女) #REQUIRED> 
    <!ATTLIST person id ID #REQUIRED> 
    <!ELEMENT name (#PCDATA)> 
    <!ELEMENT password (#PCDATA)> 
    <!ELEMENT age (#PCDATA)> 
    ]>
    <persons> 
    <person sex="男" id="p1"> 
    <name></name> 
    <password></password> 
    <age></age> 
    </person> 
    <person sex="女" id="p2"> 
    <name></name> 
    <password></password> 
    <age></age> 
    </person> 
    </persons> 

    关于XML技术先就讲到这里了,更多Java技术干货请多关注乐字节,后续继续奉献!

  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/lotbyte/p/11468587.html
Copyright © 2011-2022 走看看