精华内容
下载资源
问答
  • 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示: list1=[1,2,3,4,5] list2=['name','people'] 原因: 当列表从中间或从头增加或删除元素时,列表对象自动进行内存扩展或收缩,从而...

    什么是列表:

    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

    列表的数据项不需要具有相同的类型

    创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

    list1=[1,2,3,4,5]

    list2=['name','people']

    原因:

    当列表从中间或从头增加或删除元素时,列表对象自动进行内存扩展或收缩,从而保证元素之间没有缝隙,但这涉及到列表元素的大量的移动,效率较低,应尽量从列表尾部进行元素的增加与删除操作以提高处理速度.

    展开全文
  • XPath精确定位节点元素

    千次阅读 2012-11-06 17:18:30
    在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select = "" 中,引号括起来的部分必须能够精确地定位节点。具体的定位方法则在XPath中给出。 之所以要在XSL中引入XPath的概念,...
    在利用XSL进行转换的过程中,匹配的概念非常重要。在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select = "" 中,用引号括起来的部分必须能够精确地定位节点。具体的定位方法则在XPath中给出。 
    

    之所以要在XSL中引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路 径:通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节 点,显然这对XSLT来说是一个最最基本的功能。

    XPath数据类型

    XPath可分为四种数据类型:

    • 节点集(node-set) 
      节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。
    • 布尔值(boolean) 
      由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和 false两个值。布尔值可以和数值类型、字符串类型相互转换。
    • 字符串(string) 
      字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。
    • 数值(number) 
      在XPath 中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无 穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。

    其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。

    XPath节点类型

    另外,由于XPath包含的是对文档结构树的一系列操作,因此搞清楚XPath节点类型也是很必要的。回忆一下第二章中讲到的XML文档的逻辑结 构,一个XML文件可以包含元素、CDATA、注释、处理指令等逻辑要素,其中元素还可以包含属性,并可以利用属性来定义命名空间。相应地,在XPath 中,将节点划分为七种节点类型:

    1. 根节点(Root Node) 
      根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根节点开始。
    2. 元素节点(Element Nodes) 
      元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是本地的命名。
    3. 文本节点(Text Nodes) 
      文本节点包含了一组字符数据,即CDATA中包含的字符。任何一个文本节点都不会有紧邻的兄弟文本节点,而且文本节点没有扩展名。
    4. 属性节点(Attribute Nodes) 
      每 一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。这就是说,通过查找元素的子节点可以匹配出元 素的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也就是说不同的元素节点不共有同一个属性节点。 
      对缺省属性的处理等同于定义了的属性。如果一个属性是在DTD声明的,但声明为 #IMPLIED,而该属性没有在元素中定义,则该元素的属性节点集中不包含该属性。 
      此外,与属性相对应的属性节点都没有命名空间的声明。命名空间属性对应着另一种类型的节点。
    5. 命名空间节点(Namespace Nodes) 
      每一个元素节点都有一个相关的命名空间节点集。在XML文档中,命名空间是通过保留属性声明的,因此,在XPath中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。
    6. 处理指令节点(Processing Instruction Nodes) 
      处理指令节点对应于XML文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。
    7. 注释节点(Comment Nodes) 
      注释节点对应于文档中的注释。



    一个XML文档树

    我们来构造一棵XML文档树,作为后面举例的依托:

    
                	<A id="a1">
                <B id="b1">
                <C id="c1">
                <B name="b"/>
                <D id="d1"/>
                <E id="e1"/>
                <E id="e2"/>
                </C>
                </B>
                <B id="b2"/>
                <C id="c2">
                <B/>
                <D id="d2"/>
                <F/>
                </C>
                <E/>
                </A>
                

    以下将要介绍一些XPath中节点匹配的基本方法。



    路径匹配

    路径匹配与文件路径的表示相仿,比较好理解。有以下几个符号:

    (1)用“/”指示节点路径 
    如“/A/C/D” 表示节点"A"的子节点"C"的子节点"D",即id值为d2的D节点, “/”表示根节点。

    (2)用“//” 表示所有路径以"//"后指定的子路径结尾的元素 
    如“//E” 表示所有E元素,结果是所有三个E元素,如“//C/E”表示所有父节点为C的E元素,结果是id值为e1和e2的两个E元素 。

    (3)用“*” 表示路径的通配符 
    如“/A/B/C/*”表示 A元素→B元素→C元素下的所有子元素,即name值为b的B元素、 id值为d1的D元素和id值为e1和e2的两个E元素 
    “/*/*/D”表示上面有两级节点的D元素,匹配结果是id值为d2的D元素 ,如“//*”表示所有的元素。




    位置匹配

    对于每一个元素,它的各个子元素是有序的。

    如:/A/B/C[1]表示A元素→B元素→C元素的第一个子元素,得到name值为b的B元素

    /A/B/C[last()]表示A元素→B元素→C元素的最后一个子元素,得到id值为e2的E元素

    /A/B/C[position()>1]表示A元素→B元素→C元素之下的位置号大于1的元素,得到id值为d1的D元素和两个具有id值的E元素



    属性及属性值

    在XPath中可以利用属性及属性值来匹配元素,要注意的是,元素的属性名前要有"@"前缀。例如:

    //B[@id]表示所有具有属性id的B元素,结果为id值为b1和b2的两个B元素

    //B[@*]表示所有具有属性的B元素,结果为两个具有id属性的B元素和一个具有name属性B元素

    //B[not(@*)]表示所有不具有属性的B元素,结果为A元素→C元素下的B元素

    //B[@id="b1"] id值为b1的B元素,结果为A元素下的B元素



    亲属关系匹配

    XML文档可归结为树型结构,因此任何一个节点都不是孤立的。通常我们把节点之间的归属关系归结为一种亲属关系,如父亲、孩子、祖先、后代、兄弟等等。在对元素进行匹配时,同样可以用到这些概念。例如:

    //E/parent::* 表示所有E节点的父节点元素,结果为id值为a1的A元素和id值为c1的C元素

    //F/ancestor::* 表示所有F元素的祖先节点元素,结果为id值为a1的A元素和id值为c2的C元素

    /A/child::* 表示A的子元素,结果为id值为b1、b2的B元素,id值为c2的C元素,以及没有任何属性的E元素

    /A/descendant::* 表示A的所有后代元素,结果为除A元素以外的所有其它元素

    //F/self::* 表示所有F的自身元素,结果为F元素本身

    //F/ancestor-or-self::* 表示所有F元素及它的祖先节点元素,结果为F元素、F元素的父节点C元素和A元素

    /A/C/descendant-or-self::* 表示所有A元素→C元素及它们的后代元素,结果为id值为c2的C元素、该元素的子元素B、D、F元素

    /A/C/following-sibling::* 表示A元素→C元素的紧邻的后序所有兄弟节点元素,结果为没有任何属性的E元素

    /A/C/preceding-sibling::* 表示A元素→C元素的紧邻的前面所有兄弟节点元素,结果为id值为b1和b2的两个B元素

    /A/B/C/following::* 表示A元素→B元素→C元素的后序的所有元素,结果为id 为b2的B元素、无属性的C元素、无属性的B元素、id为d2的D元素、无属性的F元素、/无属性的E元素。

    /A/C/preceding::* 表示A元素→C元素的前面的所有元素,结果为id为b2的B元素、id为e2的E元素、id为e1的E元素、id为d1的D元素、name为 b的B元素、id为c1的C元素、id为b1的B元素



    条件匹配

    条件匹配就是利用一些函数的运算结果的布尔值来匹配符合条件的节点。常用于条件匹配的函数有四大类:节点函数、字符串函数、数值函数、布尔函数。例如last()、position()等等,这里我们就不再赘述。

    以上这些匹配方法中,用得最多的还要数路径匹配。在上一章样式表的例子中,无论是在语 句<xsl:template match="学生花名册">中,还是在语句 <xsl:value-of select="名字"/>中,都是依靠给出相对于当前路径的子路径来定位节点的。


    _______________________________________________________

     

    4.XPath的语法 

    我们在前面已经提到过,XPath是用来帮助XSLT在XML源文档中查找定位信息的语言。在实际使用过程 中,XPath和XSLT总是混在一起使用,在上面一章的语法例子中我们已经有使用到XPath的语法,只是没有明确点出。但W3C将它们分成两个标准, 所以我们也将它们拆成两章来讲解。 

    4.XPath的语法 

    4.1 当前位置 
    4.2 寻址操作 
    4.3 运算符 
    4.4 功能函数 

    4.1 当前位置 

    当 我们使用XSLT处理XML源文档是,我们用Context来表示当前正在被模板处理的节点位置。比如xsl:template match="/"语句中表示Context在文档的根(root)节点。我不知道如何准确的翻译Context这个词,它类似于C语言里的指针,表示程 序当前运行的位置。理解Context对于正确处理XSL模板非常重要,当您的XSL模板输出的文档和您想要的不一样,最先应该分析的就是Context 在哪里。
    Location Paths是用于设定你想要寻找的Context节点位置。就类似DOS的目录命令。我们看个例子

    <xsl:for-each select="child::PEOPLE/descendant::PERSON"> 

    其中child::PEOPLE/descendant::PERSON就是XPath语法,这个表达式就是一个Location Paths,代码说明要显示所有PEOPLE元素的子元素和所有PERSON元素的子元素。通常我们会采用更简单的写法:

    <xsl:for-each select="PEOPLE//PERSON"> 

    我们来解释path的两种表示方法:"/"和"//"。
    "/"是表示当前文档的节点,类似DOS目录分割符。例如:/PEOPLE表示选择根节点下的PEOPLE元素;PEOPLE/PERSON表示选择PEOPLE元素下所有的PESON子元素。
    "//"则表示当前文档所有的节点。类似查看整个目录。例如://PEOPLE表示选择文档中所有的PEOPLE元素,无论它在什么层次;PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,无论它的层次多深。

    4.2 寻址操作 

    Axis和Predicate是XPath语法中对Location Paths进行定位操作的语法,具体的用法列表如下

    Axis语法表
    --------------------------------------------------------
    表达式 简写 说明
    --------------------------------------------------------
    self . 选择当前的节点.。
    例子 :
    <TD><xsl:value-of select="."/></TD>
    代码表示在当前位置插入当前的节点包含的文本(text)值,
    --------------------------------------------------------
    parent .. 选择当前节点的父节点。 
    --------------------------------------------------------
    attribute @ 选择一个元素的所有属性。 
    例子:
    <TD><xsl:value-of select="@PERSONID"/></TD>
    选择PERSON元素的所有属性.
    --------------------------------------------------------
    child 选择当前节点的所有子元素。
    --------------------------------------------------------
    ancestor 选择当前节点的所有父元素(包括父元素的父元素,类推)
    --------------------------------------------------------

    Axis帮助我们选择当前节点周围所有的节点,而Predicate则用来定位当前节点内部的元素。表示方法为方括号[]中加表达式:[ Expression ]。具体举例如下:

    PERSON[position()=2] 
    这句代码表示寻找第二个"PERSON" 元素

    PERSON[starts-with(name, "B")] 
    这句代码表示寻找所有名称以"B"开头的PERSON元素。 

    4.3 运算符 

    这一节介绍XPath的运算符(Expressions),列表如下:
    --------------------------------------------------------
    运算符 说明
    --------------------------------------------------------
    and, or 就是普通意义的and, or 
    --------------------------------------------------------
    = 等于
    --------------------------------------------------------
    != 不等于
    --------------------------------------------------------
    >, >= 大于,大于等于
    --------------------------------------------------------
    <, <= 小于,小于等于。注意:在XSL文件中,<符号要用< 表示
    --------------------------------------------------------
    +, -, *, div 加减乘除 
    --------------------------------------------------------
    mod 取模
    --------------------------------------------------------
    | 两个节点一起计算
    --------------------------------------------------------

    4.4 功能函数(Functions) 

    在XPath里有很多功能函数可以帮助我们精确寻找需要的节点。

    count()功能
    作用:统计计数,返回符合条件的节点的个数。
    举例:<p><xsl:value-of select="count(PERSON[name=tom])"/></p>
    说明:代码的用途是显示PERSON元素中姓名属性值为tom有几个。

    number()功能
    作用:将属性的值中的文本转换为数值。
    举例:<p>The number is: <xsl:value-of select="number(book/price)"/></p>
    说明:代码的用途是显示书的价格。

    substring() 功能
    语法:substring(value, start, length)
    作用:截取字符串。
    举例:<p><xsl:value-of select="substring(name, 1, 3)"/></p>
    说明:代码的用途是截取name元素的值,从第一个字母开始显示到第三个。

    sum()功能
    作用:求和。
    举例:<p>Total Price = <xsl:value-of select="sum(//price)"/></p>
    说明:代码的用途是计算所有价格的和。

    上面这些功能只是XPath语法中的一部分,还有大量的功能函数没有介绍,而且目前XPath的语法仍然在不断发展中。通过这些函数我们可以实现更加复杂的查询和操作。

    看到这里,我们的入门教程就快结束了。通过走马观花式的快速学习,希望大家对XSLT应该有了一点基本概念:XSLT是一种转换XML文档的语言,它包含两个过程:转换和格式化。XSLT的功能比CSS强大得多,它有类似数据查询的语法。如果您对XSLT感兴趣,那么以上的知识是远远不够的,需要查询更多的资料。阿捷在最后一章附录为大家提供了主要的XSLT资源。



    _____________________________________________________________________________

    我使用XmlNode.SelectNodes(XPath)来查询xml文件中的节点.
    XPath可以是"descendant::book[author/last-name='Austen']"表示图书中作者为Austen的人
    如果我想找作者是Austen并且价格为19.5的书,怎么写这个XPath 表达式呢?

    可这样写"descendant::book[author/last-name='Austen'][price='19.5']",就可以实现组合查询。

    查看原文
    展开全文
  • Python中集合的使用,去除重复元素、创建集合、列表中去除重复元素、add()在...(1)直接把一堆元素用括号括起来; (2)使用set()工厂函数。 3.列表中去除重复的元素 (1)可以使用set方法: >>> set1 = se

    Python中集合的使用,去除重复元素、创建集合、列表中去除重复元素、add()在集合中添加元素方法、remove()删除元素方法的使用

    1.集合中元素不会重复。例如:

    >>> num2 = {1,2,3,4,5,5,4,3,2}
    >>> num2
    {1, 2, 3, 4, 5}
    

    2.创建集合的两种方法:

    (1)直接把一堆元素用括号括起来;

    (2)使用set()工厂函数。

    3.列表中去除重复的元素

    (1)可以使用set方法:

    >>> set1 = set([1,2,3,4,5,5])
    >>> set1
    {1, 2, 3, 4, 5}
    

    (2)也可以使用临时变量,如果列表中有重复的元素,则不重复添加到temp中。例如:

    >>> num1 = [1,2,3,4,5,5,3,1,0]
    >>> temp = []
    >>> for each in num1:
    	if each not in temp:
    		temp.append(each)
    
    		
    >>> temp
    [1, 2, 3, 4, 5, 0]
    		
    

    (3)还可以使用list(set())方法,去除重复元素。但是用list会自动排序,如果程序关注原始的元素先后顺序,则需要注意是否使用该方法。例如:

    >>> num1 = [1,2,3,4,5,5,3,1,0]
    >>> num1 = list(set(num1))
    >>> num1
    [0, 1, 2, 3, 4, 5]
    

    4.add()方法的使用

    在集合中添加元素

    >>> num2
    {1, 2, 3, 4, 5}
    >>> num2.add(6)
    >>> num2
    {1, 2, 3, 4, 5, 6}
    

    5.remove()方法的使用

    在集合中删除元素

    >>> num2
    {1, 2, 3, 4, 5, 6}
    >>> num2.remove(4)
    >>> num2
    {1, 2, 3, 5, 6}
    
    展开全文
  • 在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select = "" 中,引号括起来的部分必须能够精确地定位节点。具体的定位方法则在XPath中给出。 之所以要在XSL中引入XPath的概念,目的...

    在利用XSL进行转换的过程中,匹配的概念非常重要。在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select = "" 中,用引号括起来的部分必须能够精确地定位节点。具体的定位方法则在XPath中给出。

    之所以要在XSL中引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素。可以把XPath比作文件管理路 径:通过文件管理路径,可以按照一定的规则查找到所需要的文件;同样,依据XPath所制定的规则,也可以很方便地找到XML结构文档树中的任何一个节 点,显然这对XSLT来说是一个最最基本的功能。

    XPath数据类型

    XPath可分为四种数据类型:

    • 节点集(node-set) 
      节点集是通过路径匹配返回的符合条件的一组节点的集合。其它类型的数据不能转换为节点集。
    • 布尔值(boolean) 
      由函数或布尔表达式返回的条件匹配值,与一般语言中的布尔值相同,有true和 false两个值。布尔值可以和数值类型、字符串类型相互转换。
    • 字符串(string) 
      字符串即包含一系列字符的集合,XPath中提供了一系列的字符串函数。字符串可与数值类型、布尔值类型的数据相互转换。
    • 数值(number) 
      在XPath 中数值为浮点数,可以是双精度64位浮点数。另外包括一些数值的特殊描述,如非数值NaN(Not-a-Number)、正无穷大infinity、负无 穷大-infinity、正负0等等。number的整数值可以通过函数取得,另外,数值也可以和布尔类型、字符串类型相互转换。

    其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。

    XPath节点类型

    另外,由于XPath包含的是对文档结构树的一系列操作,因此搞清楚XPath节点类型也是很必要的。回忆一下第二章中讲到的XML文档的逻辑结 构,一个XML文件可以包含元素、CDATA、注释、处理指令等逻辑要素,其中元素还可以包含属性,并可以利用属性来定义命名空间。相应地,在XPath 中,将节点划分为七种节点类型:

    1. 根节点(Root Node) 
      根节点是一棵树的最上层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。在XSLT中对树的匹配总是先从根节点开始。
    2. 元素节点(Element Nodes) 
      元素节点对应于文档中的每一个元素,一个元素节点的子节点可以是元素节点、注释节点、处理指令节点和文本节点。可以为元素节点定义一个唯一的标识id。元素节点都可以有扩展名,它是由两部分组成的:一部分是命名空间URI,另一部分是本地的命名。
    3. 文本节点(Text Nodes) 
      文本节点包含了一组字符数据,即CDATA中包含的字符。任何一个文本节点都不会有紧邻的兄弟文本节点,而且文本节点没有扩展名。
    4. 属性节点(Attribute Nodes) 
      每 一个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。这就是说,通过查找元素的子节点可以匹配出元 素的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也就是说不同的元素节点不共有同一个属性节点。 
      对缺省属性的处理等同于定义了的属性。如果一个属性是在DTD声明的,但声明为 #IMPLIED,而该属性没有在元素中定义,则该元素的属性节点集中不包含该属性。 
      此外,与属性相对应的属性节点都没有命名空间的声明。命名空间属性对应着另一种类型的节点。
    5. 命名空间节点(Namespace Nodes) 
      每一个元素节点都有一个相关的命名空间节点集。在XML文档中,命名空间是通过保留属性声明的,因此,在XPath中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。
    6. 处理指令节点(Processing Instruction Nodes) 
      处理指令节点对应于XML文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。
    7. 注释节点(Comment Nodes) 
      注释节点对应于文档中的注释。

    一个XML文档树

    我们来构造一棵XML文档树,作为后面举例的依托:

         <A id="a1">
        <B id="b1">
        <C id="c1">
        <B name="b"/>
        <D id="d1"/>
        <E id="e1"/>
        <F id="e2"/>
        </C>
        </B>
        <B id="b2"/>
        <C id="c2">
        <B/>
        <D id="d2"/>
        <F/>
        </C>
        <E/>
        </A>
                

    以下将要介绍一些XPath中节点匹配的基本方法。

    路径匹配

    路径匹配与文件路径的表示相仿,比较好理解。有以下几个符号:

    (1)用“/”指示节点路径 
    如“/A/C/D” 表示节点"A"的子节点"C"的子节点"D",即id值为d2的D节点, “/”表示根节点。

    (2)用“//” 表示所有路径以"//"后指定的子路径结尾的元素 
    如“//E” 表示所有E元素,结果是所有三个E元素,如“//C/E”表示所有父节点为C的E元素,结果是id值为e1和e2的两个E元素 。

    (3)用“*” 表示路径的通配符 
    如“/A/B/C/*”表示 A元素→B元素→C元素下的所有子元素,即name值为b的B元素、 id值为d1的D元素和id值为e1和e2的两个E元素 
    “/*/*/D”表示上面有两级节点的D元素,匹配结果是id值为d2的D元素 ,如“//*”表示所有的元素。

    位置匹配

    对于每一个元素,它的各个子元素是有序的。

    如:/A/B/C[1]表示A元素→B元素→C元素的第一个子元素,得到name值为b的B元素

    /A/B/C[last()]表示A元素→B元素→C元素的最后一个子元素,得到id值为e2的E元素

    /A/B/C[position()>1]表示A元素→B元素→C元素之下的位置号大于1的元素,得到id值为d1的D元素和两个具有id值的E元素

    属性及属性值

    在XPath中可以利用属性及属性值来匹配元素,要注意的是,元素的属性名前要有"@"前缀。例如:

    //B[@id]表示所有具有属性id的B元素,结果为id值为b1和b2的两个B元素

    //B[@*]表示所有具有属性的B元素,结果为两个具有id属性的B元素和一个具有name属性B元素

    //B[not(@*)]表示所有不具有属性的B元素,结果为A元素→C元素下的B元素

    //B[@id="b1"] id值为b1的B元素,结果为A元素下的B元素

    亲属关系匹配

    XML文档可归结为树型结构,因此任何一个节点都不是孤立的。通常我们把节点之间的归属关系归结为一种亲属关系,如父亲、孩子、祖先、后代、兄弟等等。在对元素进行匹配时,同样可以用到这些概念。例如:

    //E/parent::* 表示所有E节点的父节点元素,结果为id值为a1的A元素和id值为c1的C元素

    //F/ancestor::* 表示所有F元素的祖先节点元素,结果为id值为a1的A元素和id值为c2的C元素

    /A/child::* 表示A的子元素,结果为id值为b1、b2的B元素,id值为c2的C元素,以及没有任何属性的E元素

    /A/descendant::* 表示A的所有后代元素,结果为除A元素以外的所有其它元素

    //F/self::* 表示所有F的自身元素,结果为F元素本身

    //F/ancestor-or-self::* 表示所有F元素及它的祖先节点元素,结果为F元素、F元素的父节点C元素和A元素

    /A/C/descendant-or-self::* 表示所有A元素→C元素及它们的后代元素,结果为id值为c2的C元素、该元素的子元素B、D、F元素

    /A/C/following-sibling::* 表示A元素→C元素的紧邻的后序所有兄弟节点元素,结果为没有任何属性的E元素

    /A/C/preceding-sibling::* 表示A元素→C元素的紧邻的前面所有兄弟节点元素,结果为id值为b1和b2的两个B元素

    /A/B/C/following::* 表示A元素→B元素→C元素的后序的所有元素,结果为id 为b2的B元素、无属性的C元素、无属性的B元素、id为d2的D元素、无属性的F元素、/无属性的E元素。

    /A/C/preceding::* 表示A元素→C元素的前面的所有元素,结果为id为b2的B元素、id为e2的E元素、id为e1的E元素、id为d1的D元素、name为 b的B元素、id为c1的C元素、id为b1的B元素

    条件匹配

    条件匹配就是利用一些函数的运算结果的布尔值来匹配符合条件的节点。常用于条件匹配的函数有四大类:节点函数、字符串函数、数值函数、布尔函数。例如last()、position()等等,这里我们就不再赘述。

    以上这些匹配方法中,用得最多的还要数路径匹配。在上一章样式表的例子中,无论是在语 句<xsl:template match="学生花名册">中,还是在语句 <xsl:value-of select="名字"/>中,都是依靠给出相对于当前路径的子路径来定位节点的。
    _______________________________________________________

    4.XPath的语法 

    我们在前面已经提到过,XPath是用来帮助XSLT在XML源文档中查找定位信息的语言。在实际使用过程 中,XPath和XSLT总是混在一起使用,在上面一章的语法例子中我们已经有使用到XPath的语法,只是没有明确点出。但W3C将它们分成两个标准, 所以我们也将它们拆成两章来讲解。 

    4.XPath的语法 

    4.1 当前位置 
    4.2 寻址操作 
    4.3 运算符 
    4.4 功能函数 

    4.1 当前位置 

    当 我们使用XSLT处理XML源文档是,我们用Context来表示当前正在被模板处理的节点位置。比如xsl:template match="/"语句中表示Context在文档的根(root)节点。我不知道如何准确的翻译Context这个词,它类似于C语言里的指针,表示程 序当前运行的位置。理解Context对于正确处理XSL模板非常重要,当您的XSL模板输出的文档和您想要的不一样,最先应该分析的就是Context 在哪里。
    Location Paths是用于设定你想要寻找的Context节点位置。就类似DOS的目录命令。我们看个例子

    <xsl:for-each select="child::PEOPLE/descendant::PERSON"> 

    其中child::PEOPLE/descendant::PERSON就是XPath语法,这个表达式就是一个Location Paths,代码说明要显示所有PEOPLE元素的子元素和所有PERSON元素的子元素。通常我们会采用更简单的写法:

    <xsl:for-each select="PEOPLE//PERSON"> 

    我们来解释path的两种表示方法:"/"和"//"。
    "/"是表示当前文档的节点,类似DOS目录分割符。例如:/PEOPLE表示选择根节点下的PEOPLE元素;PEOPLE/PERSON表示选择PEOPLE元素下所有的PESON子元素。
    "//"则表示当前文档所有的节点。类似查看整个目录。例如://PEOPLE表示选择文档中所有的PEOPLE元素,无论它在什么层次;PEOPLE//PERSON表示在PEOPLE元素下所有的PERSON元素,无论它的层次多深。

    4.2 寻址操作 

    Axis和Predicate是XPath语法中对Location Paths进行定位操作的语法,具体的用法列表如下

    Axis语法表
    --------------------------------------------------------
    表达式 简写 说明
    --------------------------------------------------------
    self . 选择当前的节点.。
    例子 :
    <TD><xsl:value-of select="."/></TD>
    代码表示在当前位置插入当前的节点包含的文本(text)值,
    --------------------------------------------------------
    parent .. 选择当前节点的父节点。 
    --------------------------------------------------------
    attribute @ 选择一个元素的所有属性。 
    例子:
    <TD><xsl:value-of select="@PERSONID"/></TD>
    选择PERSON元素的所有属性.
    --------------------------------------------------------
    child 选择当前节点的所有子元素。
    --------------------------------------------------------
    ancestor 选择当前节点的所有父元素(包括父元素的父元素,类推)
    --------------------------------------------------------

    Axis帮助我们选择当前节点周围所有的节点,而Predicate则用来定位当前节点内部的元素。表示方法为方括号[]中加表达式:[ Expression ]。具体举例如下:

    PERSON[position()=2] 
    这句代码表示寻找第二个"PERSON" 元素

    PERSON[starts-with(name, "B")] 
    这句代码表示寻找所有名称以"B"开头的PERSON元素。 

    4.3 运算符 

    这一节介绍XPath的运算符(Expressions),列表如下:
    --------------------------------------------------------
    运算符 说明
    --------------------------------------------------------
    and, or 就是普通意义的and, or 
    --------------------------------------------------------
    = 等于
    --------------------------------------------------------
    != 不等于
    --------------------------------------------------------
    >, >= 大于,大于等于
    --------------------------------------------------------
    <, <= 小于,小于等于。注意:在XSL文件中,<符号要用< 表示
    --------------------------------------------------------
    +, -, *, div 加减乘除 
    --------------------------------------------------------
    mod 取模
    --------------------------------------------------------
    | 两个节点一起计算
    --------------------------------------------------------

    ________________________________________________________________

    selenium使用Xpath定位之完整篇

    其中有一片文章提到了xpath元素定位,但是该文章中有些并不能适应一些特殊与个性化的场景。在文本中提供xpath元素的定位终极篇,你一定能在这里找到你需要的解决办法。

    第一种方法:通过绝对路径做定位(相信大家不会使用这种方式)

    By.xpath("html/body/div/form/input")
    By.xpath("//input")

    第三种方法:通过元素索引定位

    By.xpath("//input[4]")

    第四种方法:使用xpath属性定位(结合第2、第3中方法可以使用)

    By.xpath("//input[@id='kw1']")
    By.xpath("//input[@type='name' and @name='kw1']")

    第五种方法:使用部分属性值匹配(最强大的方法)

    By.xpath("//input[start-with(@id,'nice')
    By.xpath("//input[ends-with(@id,'很漂亮')
    By.xpath("//input[contains(@id,'那么美')]")
    展开全文
  • 2、元组的表示方式:小括号()括起来,单个元素括起来用逗号(,)区分是单个对象还是元组 3、元组的创建: 创建空元组的字符值:t = () 创建非空元组的字面值: t = 200, t =(20, ) t =(1, 2, 3) t = 100, 200,....
  • 字符串型,引号括起来,整数可转成int,小数可转成float 整数 浮点数,浮点数转成整数直接舍去小数位 数据拼接 %方法:%c,%s,%d,%f等占位符代表字符或者字符串,一同输出 print('%s %s' % ('hello','world')) >...
  • Python_列表

    2020-11-23 10:07:36
    -创建列表的简单方法方括号[]将元素括起来: ['spam', 2.0, 5, 40] -一个列表作为另一个列表的元素称为列表的嵌套: ['hello', 16.0, 25,[1, 2, 3]] -不含任何元素的列表称为空列表,使用空的方括号([])创建一...
  • Mathematica 3 -- 列表生成(1)

    千次阅读 2020-01-22 13:30:00
    引入 列表表示对象:数组 (向量)、矩阵、集合、数据库中的记录、 数据结构中的树和图等。 列表形式:花括号围...一个花括号把元素括起来 特点: 方式简单明了,列表元素较少时使用 类似于数据库中的记录 可...
  • Python中列表的是很常见的数据类型之一,有点类似...只要把逗号分隔的不同的数据项使用方括号括起来即可。 3.列表序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推 ...
  • python:列表、元组

    2018-01-01 21:22:24
    1、列表就是中括号括起来的一堆数据,数据之间逗号隔开 2、python的列表是比较强大的,它可以包含很多不同类型的数据:整型数字,浮点型,字符串以及对象等例1: list = ["心有猛虎,细嗅蔷薇",1,[1,2],(4,7)]...
  • 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来 示例: list01 = ['a','b','c'] 列表更新元素 一个列表是可以储存不同的类型的数据结构,并且修改的新元素也不一定需要和原来的元素类型一致,但是要...
  • ​ 创建列表可以使用list([iterable])函数,或者中括号[]将元素括起来,元素之间逗号分隔。在Python Shell中运行实例代码如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接...
  • Python3 列表

    2021-01-03 04:47:26
    Python3 列表 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 – 它的位置,或...创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示: list1 = ['Google', 'Runoob', 19
  • Python3 列表 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 Python有6个序列的内置类型,但最常见的是列表和元组。 序列都...
  • Python列表函数和方法

    千次阅读 2016-09-16 09:56:41
    把逗号分隔的不同的数据项使用方括号括起来。 eg: list=["a","b",3,"dream"] 列表的函数: len(list) 返回列表元素个数 max(list) 返回列表元素中的最大值 min(list) 返回列表元素中的最小值 list(seq) 将元组...
  • (3、列表元素都有索引和值两个属性,索引从0开始,每个索引都对应一个值;(4、有中括号括起来元素,元素之间有逗号隔开。 2、元组:(1、一经定义内容无法改变;(2、元组元素可以是不同的类型;(3、元组使用圆括号...
  • 创建一个列表,只需要逗号分隔不同的数据项,使用方括号括起来即可。列表内的数据类型可以不一样。 更新、删除列表元素 list[Number] = obj  del list[number]  del list  可以使用 加法 乘法 运算符拼接...
  • 作业:列表、元组

    2020-12-22 00:23:49
    一、 序列概述 1、序列是Python中最基本的数据结构。 1)序列中的每个元素都...创建一个列表 ,只要把逗号分隔的不同的数据项使用方括号括起来即可。 2、概念 索引:从0开始,最后是-1,数据类型为整型(int) 元素列表
  • Lisp列表

    2017-12-11 17:33:43
    Lisp列表 在Lisp中,列表如下所示:'(rose violet daisy buttercup).此列表前面有一个单撇号。...这份名单的要素是四种不同花朵的名字,它们之间空格隔开,并用圆括号括起来,就像田野里有一块石
  • Python 列表、元祖

    千次阅读 2019-04-14 10:03:15
    一、列表:打了激素的数组 数组这个概念呢,就是把一大堆同种类型的数据挨个排放在一起,然后通过...创建列表和创建普通变量一样,中括号括起来一堆数据就可以了,数据之间逗号隔开,这样一个普普通通的列表就...
  • python列表列表的相关运算

    万次阅读 多人点赞 2019-01-02 09:33:31
    一、列表 数据类型:数字类型、字符串、列表、字典、元祖、集合、迭代器、生成器、函数 1、什么列表(list) 相当于其他语言的数组。...通过[]括起来,里面有多多个元素,每个元素用逗号隔开。 例...
  • 所谓列表推导式,就是将一个可迭代的列表遍历,将每次遍历的元素拿出来进行一些操作,并用一个【】括起来,组成一个新的列表 语法 [expression for i in item if condition] expression 就是对每一个元素的具体...
  • python零基础到实践——列表

    千次阅读 2020-02-26 10:37:11
    hello大家好我是你们的朋友JamesBin,今天本文的主要内容是列表,在本节你会学到列表是什么,以及如何使用列表元素。列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。列表是...
  • #通过list类创建的对象li,中括号括起来。 逗号分隔每个元素列表中的元素可以数字可以字符串,列表,布尔值,所有的都可以放进去。 “集合”,内部可以放任何东西。 2.通过索引,切片取值 print( li[0]),print(li...
  • 微信小程序 列表渲染多层嵌套循环

    万次阅读 2018-08-09 15:25:01
    入门教程之列表渲染多层嵌套循环,目前官方的文档里,主要是一维数组列表渲染的案例,还是比较简单单一,给刚入门的童鞋还是无从入手的感觉。 &lt;view wx:for="{{items}}"&gt; {{index}}: {{...
  • 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。...创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
  • Python列表,排序,字典

    千次阅读 2019-01-09 21:26:57
    列表(list) 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可 ...删除列表元素用 del list[i] list = ['Google', 'Runoob', 1997, 2000] del list[2] ## ['Google', 'Runoob', 2000] 操作符...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,333
精华内容 16,533
关键字:

列表元素用什么括起来