跳转到内容

XPath/CSS 等效

来自维基教科书,开放书籍,开放世界

CSS 等效

[编辑 | 编辑源代码]

:disabled 等效

//*[@disabled] 代表 :disabled

:checked 等效

//*[@checked] 代表 :checked

:selected 等效

//*[@selected] 代表 :selected

:text 等效

//*[@type="text"] 代表 :text

:contains 等效

//*[contains(text(),"you")] 代表 :contains("you")

:only-of-type 查询

//p[contains(@me,"you")] 代表 p[me*="you"]

以...开头等效

//p[starts-with(@me,"you")] 代表 p[me^="you"]

包含等效

//p[starts-with(@me,concat("you",'-'))] 代表 p[me|="you"]

以...结尾等效

//p[substring(@me,string-length(@me)-2)="you"] 代表 p[me$="you"]

像等效

//p[contains(concat(" ",@me, " ")," you ")] 代表 p[me~="you"]

否定属性等效

//p[@me!="you"] 代表 p[me!="you"]

ID 等效

//p[@id="me"] 代表 p#me

:not 等效

//p[not(@id="me")] 代表 p:not(#me)

类等效

//p[contains(concat(" ", @class, " "), " me ")] 代表 p.me

后代等效

//div//p 代表 div p

子节点等效

//div/p 代表 div > p

相邻兄弟节点等效

//h1/following-sibling::div 代表 h1 + div

一般兄弟节点等效

//h1/following-sibling::*[count(div)] 代表 h1 ~ div

CSS3 / jQuery 等效

[编辑 | 编辑源代码]

:nth-last-child(n) 查询

//*[count(child::node() ) > 0] 代表 hasChildNodes

:root 查询

/*[1] 代表 :root

:first-child 查询

descendant::*[1] 代表 :first-child

:last-child 查询

//*[last()] 代表 :last-child

:nth-last-child(n) 查询

//*[count(*)=1] 代表 :only-child

:empty 查询

//*[count(*) = 0] 代表 :empty

:nth-child(n) 查询

//*[position() mod n = 1] 代表 :nth-child(n)

:nth-child(odd) 查询

//*[(position() mod 2)=1] 代表 :nth-child(odd)

:nth-child(even) 查询

//*[(position() mod 2)=0] 代表 :nth-child(even)

:nth-last-child(n) 查询

//*[(count() - position()) mod n = 1] 代表 :nth-last-child(n)

:nth-of-type(n) 查询

//p[n] 代表 :nth-of-type(n)

:nth-last-of-type(n) 查询

//p[(count() - position()) mod n = 1] 代表 :nth-last-of-type(n)

:first-of-type 查询

descendant::p[1] 代表 :first-of-type

:last-of-type 查询

//p[last()] 代表 :last-of-type

:only-of-type 查询

//p[count(*)=1] 代表 :only-of-type

-moz-any/-webkit-any 查询

[local-name()='h1' or local-name()='h4']/node() 代表 -moz-any(h1,h4) *

DOM 等效

[编辑 | 编辑源代码]

//mytag 代表 getElementsByTagName

//*[@class=$myclass] 代表 getElementsByClassName

//* 代表 childNodes

preceding-sibling::*[1] 代表 previousSibling

following-sibling::*[1] 代表 nextSibling

./following-sibling::* 代表 generalSibling

条件逻辑等效

[编辑 | 编辑源代码]

- 谓词就像 SQL 的 where 子句

- 管道就像 SQL 的 union 子句

- 轴就像 SQL 的 t1.col = t2.col

- 使用带有布尔变量检查的谓词作为 if 语句

- 使用带有标签名搜索的管道作为范围检查器

//h2 | //h3 | //h4

- 使用带有否定谓词变量检查的管道作为 else 语句

//var[1] | //var[not //var]

- 使用重复轴跳过树中的级别,以检索每隔分支的节点

child::*/child::*

- 使用变量在复杂和/或条件测试中存储单个检查

- 在循环中使用变量来存储依赖于迭代的变量,并将逻辑与输出分离

- 使用 string-length 测试函数的存在

- 使用单独的测试,例如 (a and c) 或 (b and c),而不是嵌套条件,例如 ((a or b) and c)

- 使用 string(.), local-name(.),string-length(concat(., '') ), number(.), 和 boolean(.)[boolean(.)] 测试节点值、名称和存在

- 使用 //node()[local-name(.) = $myvar] 测试表单值是否存在

- 使用 //node()[local-name(.) = $myvar][boolean(node())] 跳过空表单值

- 调试时始终跳过空节点

- 使用 local-name(.)[boolean(.)] 测试上下文节点中是否存在空标签

- 使用 boolean(@*[not aa or not bb]) 过滤已知属性

- 使用 {boolean((string$myvar))} 测试插值变量

- 使用 boolean(following::*[1] or following::. or following::self::*) 测试结束标签失败

- 使用 count(//*[1 | last() = 1]) 统计只有一个子节点的节点

- 使用 (table1 | table2)[col=val]/* 进行连接

- 使用 *[not(@*)] 返回没有属性的节点

- 使用 number(.) - number(.) 抑制数值

- 使用 substring(., 0, string-length(.) ) 抑制字符串值

- 使用 substring('0', 1, not($myvar) ) 将未定义的变量设置为零

- 使用 normalize-whitespace($myvar) 删除列表中的制表符

- 使用 translate($myvar, $ABCvar, $abcvar) 以及存储 A-Z 和 a-z 的变量,以忽略节点查询的大小写

- 在检查列表位置时使用 string-length 而不是 contains,使逻辑数据独立

- 使用 use-attribute-sets 与多个元素共享样板参数,例如表格或列表行

- 在选择时使用 * 或 self::* 以返回节点集或单个节点

- 使用 string(.) 从使用 document 函数调用的 XML 文件中获取节点

- 在每个列表项之间使用不同的分隔符,使 substring-before/after 逻辑更易读

- 使用节点/类名与计数器/节点值的字符串连接来生成 ID 属性

- 使用变量存储上一个索引值,并使用逗号使 substring-after 能够与递归一起使用

- 使用带有节点布尔值的谓词作为保护运算符

smyvar[$myvar]

- 使用 XSL 节点存储本地值,并使用管道在谓词中测试 XML 节点,以模拟默认运算符 $dynamic[$var] | $default[not($var)]

- 使用子节点轴代替斜杠来对子节点进行分组

child::(boy | girl)

- 避免使用 (*),因为它在测试子节点之前会遍历树

- 使用 node() 而不是 .,当使用 // 搜索所有元素时

- 使用节点本身的 generate-id 的谓词检查和节点变量执行交集和排除集运算

- 使用 concat 连接节点和虚拟参数,以检查节点是否存在

- 使用 string(number(.))=NaN 检查数值节点值是否存在

- 在比较包含多个节点的变量时,使用 not($a=$b) 而不是 $a !=$b

- 在括号之后使用换行符,避免留下一个未结束的括号

- 使用谓词检查表单字段名是否在 XML 文档中存在

- 使用 qname 获取标签的命名空间绑定

- 使用 id() 获取 generate-id 值,而不是变量插值

华夏公益教科书