Язык XML

       

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


Некоторые примеры путей адресации, использующих сокращенный синтаксис:

  • para находит элемент para, являющийся непосредственным потомком текущего узла контекста

  • * находит все элементы, являющиеся непосредственными потомками текущего узла контекста

  • text() находит все текстовые узлы, являющиеся непосредственными потомками текущего узла контекста

  • @name выделяет атрибут name в текущем узле контекста

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

  • para[1] находит первый непосредственный потомок para текущего узла контекста

  • para[last()] находит последний непосредственный потомок para текущего узла контекста

  • */para находит все потомки во втором поколении para текущего узла контекста

  • /doc/chapter[5]/section[2] в doc в пятом chapter находит второй section

  • chapter//para собирает элементы para, являющиеся потомками элемента chapter, который является непосредственным потомком текущего узла контекста

  • //para собирает все para, являющиеся потомками корневого узла документа, то есть находит все элементы para в том документе, где располагается текущий узел контекста

  • //olist/item в документе, где располагается текущий узел контекста, находит все элементы item, имеющие родителем olist

  • . выделяет текущий узел контекста

  • .//para собирает элементы para, являющиеся потомками текущего узла контекста

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

  • ../@lang выделяет атрибут lang, принадлежащий родителю текущего узла контекста

  • para[@type="warning"] находит все непосредственные потомки para текущего узла контекста, имеющие атрибут type со значением warning

  • para[@type="warning"][5] находит пятый по счету из непосредственных потомков para текущего узла контекста, имеющих атрибут type со значением warning

  • para[5][@type="warning"] извлекает пятый непосредственный потомок para текущего узла контекста, если этот потомок имеет атрибут type со значением warning

  • chapter[title="Introduction"] получает непосредственный потомок текущего узла контекста chapter, который в свою очередь имеет один или несколько непосредственных потомков title со , равным Introduction




  • chapter[title] находит непосредственный потомок chapter текущего узла контекста, который имеет один или несколько непосредственных потомков title



  • employee[@secretary and @assistant] находит все непосредственные потомки employee данного узла контекста, которые имеют оба атрибута secretary и assistant

    Самой важной является аббревиатура child::, которую при записи шага адресации всегда можно опустить. Фактически, child используется как ось по умолчанию. Например, путь адресации div/para становится сокращением для child::div/child::para.

    Аналогичные аббревиатуры имеются и для атрибутов: attribute:: может быть сокращен до @. Например, путь адресации para[@type="warning"] является сокращением для child::para[attribute::type="warning"], а следовательно, находит непосредственные потомки para, имеющие атрибут type, значение которого равно warning.

    // является сокращением для /descendant-or-self::node()/. Например, //para - это сокращение для /descendant-or-self::node()/child::para, а потому будет находить в документе все элементы para (путь //para найдет элемент para, даже если последний является элементом документа, поскольку узел элемента документа является непосредственным потомком корневого узла). div//para - это сокращение для div/descendant-or-self::node()/child::para, а потому находит все потомки para для непосредственного потомка div. Замечание: Путь адресации //para[1] имеет иное значение, чем путь адресации /descendant::para[1]. Последний отыскивает первый элемент-потомок para, а предыдущий находит все элементы-потомки para, являющиеся для своего родителя первым непосредственным потомком para.

    Шаг адресации . является сокращением для self::node(). Особенно эта запись полезна в сочетании с //. Например, путь адресации .//para является сокращением для self::node()/descendant-or-self::node()/child::para

    а потому будет находить все элементы para, являющиеся потомками текущего узла контекста.

    Точно так же, шаг адресации .. является сокращением для parent::node(). Например, ../title - это сокращенная запись для parent::node()/child::title, а потому для родителя текущего узла контекста будет находить непосредственные потомки title.


    Содержание раздела