zoukankan      html  css  js  c++  java
  • [XPath] XPath 与 lxml (一)XPath 术语

    前言

      这是一篇主要介绍 XPath 的文章,由于 JQuery 已经不支持 XPath,所以本文主要通过 Python 的 lxml.etree 来介绍 XPath。

    什么是 XPath ?

      XPath 是一门在 XML 文档中查找信息的语言,对 XPath 的理解是很多高级 XML 应用的基础,XPath 在 XML 中通过元素和属性进行导航。

    什么是 lxml ?

      lxml 是一个用来处理 XML 的第三方 Python 库,它在底层封装了用 C 语言编写的 libxml2 和 libxslt,并以简单强大的 Python API,兼容并加强了著名的 ElementTree API。

    XPath 术语

      在 XPath 语境中,XML 文档被视作节点树,节点树的根节点也被称作文档节点

      XPath 将节点树中的节点(Node)分为七类:元素(Element),属性(Attribute),文本(Text),命名空间(Namespace),处理指令(Processing-instruction),注释(Comment)和文档节点(Document nodes)。

    请看一下 XML 文档:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book>
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author> 
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    </bookstore>

    以上 XML 文档中:

    <bookstore> (这是一个“根”)
    <author>J K. Rowling</author> (这是一个“元素”)
    lang="en" (这是一个“属性”)

    换个视角理解它:

    - bookstore                             (我是根)
        - book                              (我是元素)
            - title                         (我是元素)
                - attributes                (我是属性)
                    - lang  = en            (楼上其实是属性容器,我才是属性)
                - text = Harry Potter       (我是文本)
            - author                        (我是元素)
                - text = J K. Rowling       (我是文本)
            - year                          (我是元素)
                - text = 2005               (我是文本)
            - price                         (我是元素)
                - text = 29.99              (我是文本)

    以上就是节点树的示意图,看起来是不是很像 YAML 格式,每一行都表示一个节点,缩进表示各行之间的关系。其中无父或无子的节点被称为原子值(Atomic value)也称基本值,以上等号后面的都是原子值。节点和基本值都统称为项目(Item)。

    节点之间的关系

    父(Parent)

    每个元素都肯定有一个父节点,最顶层的元素父亲是节点。同理每个属性必然有一个父,它们的父是元素

    上文 XML 文档中,根 bookstore 是元素 book 的父节点,book 是元素 title, author, year, price 的父节点,title 是 lang 的父节点。

    子(Children)

    元素可以有零或多个子。

    上文 XML 文档中,title, author, year, price 是 book 的子节点。

    同胞(Sibling)

    父节点相同的节点之间互为同胞,也称彼此的兄弟节点。

    上文 XML 文档中,title, author, year, price 彼此互为同胞。

    先辈(Ancestor)

    某节点的父节点、父的父,以此类推一直追溯至根节点之间所有节点。

    上文 XML 文档中,title, author, year, price 的先辈就是 book, bookstore。

    后代(Descendant)

    某节点的子节点、子的子,以此类推至最后一个子节点之间所有节点。

    上文 XML 文档中,bookstore 的后代就是 title, author, year, price 。

  • 相关阅读:
    Daily Scrumming 2015.10.20(Day 1)
    Buaaclubs项目介绍
    [转载] Linux创建用户后,切换用户报This account is currently not available
    NetFPGA-1G-CML从零开始环境配置
    Digilent Xilinx USB Jtag cable
    OVS流表table之间的跳转
    Linux换源
    Scapy安装以及简单使用
    Do in SDN
    KMP算法
  • 原文地址:https://www.cnblogs.com/ifantastic/p/3863271.html
Copyright © 2011-2022 走看看