Сокращенный синтаксис XPath
Сокращенный синтаксис 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() < 5][@UNITS] выбирает первых пятерых детей контекстного узла, у которых есть атрибут UNITS.