Интернет программирование стр.99
В нашем примере мы указали конструкцию id(2) .child(2,phone). Абсолютный и относительный локаторы разделены точкой. Впрочем, к этой конструкции можно добавить и еще один относительный локатор. Так, если мы используем конструкцию id (2) .child(2,phone) . child (3, #element) , это выражение XPointer будет означать поиск третьего дочернего элемента относительно второго дочернего элемента phone, который отыскивается у какого-либо элемента с идентификатором "2".
Мы видим, что после каждого ключевого слова в строке параметров сначала записывается порядковый номер или смещение указываемого объекта. Данное смещение может быть как положительным, так и отрицательным. Например, для того чтобы установить указатель на третий по счету элемент перед элементом phone, мы должны использовать конструкцию preceding (-2, phone).
В первом аргументе мы можем указать не только численное смещение, но и ключевое слово all. Оно применяется, если нужно выбрать не один экземпляр, как при указании конкретного номера, а все экземпляры, которые удовлетворяют поставленному условию поиска. Так, для того чтобы отыскать все дочерние элементы объекта firm, следует использовать конструкцию child (all, firm).
Вторым аргументом является указание на тип отыскиваемого ресурса. До сих пор во всех примерах мы использовали в качестве второго аргумента лишь прямое наименование элемента. Помимо этого наименования, могут применяться и другие ключевые слова, устанавливающие тип ресурса, который необходимо найти. Достаточно редкий аргумент #pi позволяет отыскивать инструкции XML по обработке (те, что определяются при помощи вопросительных знаков после угловых скобок).
Аргумент #eiement позволяет отыскивать любые элементы, независимо от их наименования. Для отыскания какого-либо комментария берется аргумент #comment. Аргумент #cdata позволяет отыскивать текст внутри элементов cdata. Если же необходимо отыскивать текст не только внутри элементов cdata, но и внутри любого элемента XML, следует использовать инструкцию #text. Аргумент #aii позволяет отыскивать любые виды ресурсов. Этот аргумент может объединять все рассмотренные виды аргументов.
Например, если мы хотим произвести выбор второго текстового блока внутри первого потомка абсолютного указателя местоположения, следует использовать конструкцию descedant(2,#text).
Узлы типа #pi, #comment, #text и #cdata позволяют осуществлять внутри этих узлов поиск еще и по конкретной строке.
В списке аргументов для ключевого слова на третьем месте записывается наименование атрибута. Если нам необходимо произвести поиск по какому-либо атрибуту, мы указываем в аргументах ключевого слова XPointer атрибут, а через запятую — его значение. Таким образом, для поиска второго дочернего элемента для того элемента, у которого атрибут phone будет равен "455552", следует использовать конструкцию child (2, #element, "phone", "455552"). Может возникнуть ситуация, когда просто необходимо найти элемент, у которого данный атрибут присутствует, но значение его нам не важно. Для этих целей мы немного модифицируем условие относительного указания местоположения, и получаем конструкцию child(2,#eiement, "phone", *). Если у данного атрибута нет заданных или установленных по умолчанию значений, последний аргумент условия поиска можно задать при помощи ключевого слова #implied. Тогда наша конструкция примет ВИД child(2,#element,phone,#implied).
*