Сокращенный синтаксис XPath

We use cookies. Read the Privacy and Cookie Policy

Сокращенный синтаксис XPath

Сокращения синтаксиса XPath могут быть весьма удобными. Ниже приведены правила:

• self::node() может быть сокращено как .;

• parent::node() может быть сокращено как ..;

• child::childname может быть сокращено как childname;

• attribute::childname может быть сокращено как @childname;

• /descendant-or-self::node()/ может быть сокращено как //.

Например, путь расположения .//PLANET — сокращение для self::node()/descendant-or-self::node()/child::PLANET. Можно также сократить выражение предиката [position()=3] как [3], [position()=last()] как [last()] и т.д. Работать с путями расположения XPath при помощи сокращенного синтаксиса значительно проще. В следующем списке перечислен ряд примеров путей расположения с использованием сокращенного синтаксиса:

• PLANET возвращает дочерние элементы <PLANET> контекстного узла;

• * возвращает все дочерние элементы контекстного узла;

• text() возвращает все дочерние текстовые узлы контекстного узла;

• @UNITS возвращает атрибут UNITS контекстного узла;

• @* возвращает все атрибуты контекстного узла;

• PLANET[3] возвращает третьего ребенка <PLANET> контекстного узла;

• PLANET[last()] возвращает последнего ребенка <PLANET> контекстного узла;

• */PLANET возвращает всех внуков <PLANET> контекстного узла;

• /PLANETS/PLANET[3]/NAME[2] возвращает второй элемент <NAME> третьего элемента <PLANET> элемента <PLANETS>;

• //PLANET возвращает всех потомков <PLANET> корня документа;

• PLANETS//PLANET возвращает элементы-потомки <PLANET> дочерних элементов <PLANETS> контекстного узла;

• //PLANET/NAME возвращает все элементы <NAME>, у которых есть родитель <PLANET>;

• . возвращает сам контекстный узел;

• .//PLANET возвращает элементы-потомки <PLANET> контекстного узла;

• .. возвращает родителя контекстного узла;

• ../@UNITS возвращает атрибут UNITS родителя контекстного узла;

• .//.. возвращает всех родителей потомка контекстного узла и родителя контекстного узла;

• PLANET[NAME] возвращает детей <PLANET> контекстного узла, у которых есть дети <NAME>;

• PLANET[NAME="Venus"] возвращает детей <PLANET> контекстного узла, у которых есть дети <NAME> с текстом, равным «Venus»;

• PLANET[@UNITS="days"] возвращает всех детей <PLANET> контекстного узла, у которых есть атрибут UNITS со значением «days»;

• PLANET[6][@UNITS="days"] возвращает шестого ребенка <PLANET> контекстного узла, только если у этого ребенка есть атрибут UNITS со значением «days». Можно также написать PLANET[@UNITS="days"][6];

• PLANET[@COLOR and @UNITS] возвращает всех детей <PLANET> контекстного узла, у которых есть атрибут COLOR и атрибут UNITS;

• "//PLANET[not(.=preceding::PLANET)]" выбирает все элементы <PLANET>, значение которых отлично от значения любого предшествующего элемента <PLANET>;

• *[1][self::NAME] выбирает любой элемент <NAME>, который является первым ребенком своего родителя;

• *[position() &lt; 5][@UNITS] выбирает первых пятерых детей контекстного узла, у которых есть атрибут UNITS.