четверг, 10 мая 2012 г.

CSS и XPath


В таблице ниже вы можете увидеть соответствие между xpath запросом и его аналогом в css.
 
 
Таблица преобразования CSS селекторов в запросы XPath.
CSS селектор XPath запрос Описание
* //* Любой элемент
E //E Элемент с тэгом E (типа E)
E[foo] //E[@foo] Элемент E, у которого есть атрибут foo
E[foo="bar"] //E[@foo="bar"] Элемент E, у которого значение атрибута foo равно bar
E[foo~="bar"] //E[contains( concat(" ", @foo, " "), concat(" ", "bar", " ") )] Элемент E, у которого значение атрибута foo представляет собой список значений, разделенных пробелами, и одно из них равно bar
E[foo^="bar"] //E[starts-with(@foo, "bar")] Элемент E, у которого значение атрибута foo начинается с bar
E[foo$="bar"] //E[substring(@foo, string-length(@foo) - string-length("bar") + 1) = "bar"] Элемент E, у которого значение атрибута foo заканчивается bar
E[foo*="bar"] //E[contains(@foo, "bar")] Элемент E, у которого значение атрибута foo содержит bar
E[foo|="bar"] //E[@foo="bar" or starts-with(@foo, concat("bar", "-")] Элемент E, у которого значение атрибута foo представляет собой разделенный дефисами список значений, который начинается с bar
E:nth-child(a*n+b) a < 0: //*[position() <= b][name() = "E"]
a == 0: //*[position() = b][name() = "E"]
a > 0: //*[(position() + b) mod a = 0][name() = "E"]
Элемент E, который является a*n+b ребенком своего родителя
E:nth-last-child(a*n+b) a < 0: //*[position() > last() — b][name() = "E"]
a == 0: //*[last() - b][name() = "E"]
a > 0: //*[(last() - position() + b - 1) mod a = 0][name() = "E"]
Элемент E, который является a*n+b ребенком с конца своего родителя
E:first-child //*/*[1][name() = "E"] или
//*/*[1]/self::E
Элемент E, который является первым ребенком своего родителя
E:last-child //*/*[last()][name() = "E"] или
//*/*[last()]/self::E
Элемент E, который является последним ребенком своего родителя
E:only-child //*[count(*) = 1]/E Элемент E, который является единственным ребенком своего родителя
E:empty //E[count(*) = 0 and (not(text()) or text() = "")] Элемент E, у которого нет детей, включая текстовых нод
E:checked //E[@checked] -
E:enabled //E[@disabled="false"] -
E:disabled //E[@disabled="true"] -
E.warning //E[contains(concat(" ", @class, " "), concat(" ", "warning", " ")] Элемент E, у которого есть класс warning
#myid id(«myid») Элемент c id равным myid
E#myid //E[@id="myid"] Элемент E, у которого id равен myid
E:not(s) //E[not(_selector_)] Отрицательный селектор
E F //E//F Элемент F, который является потомков E
E > F //E/F Элемент F, который является ребенком E
E + F //E/following-sibling::*[1]/self::F Элемент F, который непосредственно следует за E
E ~ F //E/following-sibling::F Элемент F, который следует за E
взято тут

1 комментарий: