использование родительской точечной нотации в xpath для поиска другой ветви в дереве XML - PullRequest
1 голос
/ 20 марта 2011

Я запускаю xslt для XML, который в какой-то момент помещает мой текущий узел в следующий элемент "item" в дереве:

host/device/item

Я обнаружил в результате экспериментов, что следующий xpathвозвращает xslt обратно в ветку «host» дерева XML, а затем успешно находит великий дочерний элемент «trigger» элемента «host».

../.././setting/trigger

Работает, но синтаксис xpath кажетсястранно для меня.Точечная родительская запись ../../. имеет смысл, когда вы читаете ее с . справа налево.Но обозначение дочерней фразы setting/trigger имеет смысл, только если вы читаете слева направо.«Окончательное значение» всего xpath эквивалентно высказыванию:

host/setting/trigger

Всегда ли верно, что средняя ../. секция xpath (или сколько бы родительских ../ уровней это ни было)всегда игнорируется, чтобы создать окончательное значение host/device/trigger?

1 Ответ

1 голос
/ 20 марта 2011

Поскольку . означает «я», вы можете интерпретировать его как игнорируемый../././././././* означает то же самое, что и ./*, что означает то же самое, что и *.

Относительно чтения XPath, разбив его из узла контекста host/device/item

В ../.././setting/trigger, / символы разделяют тесты узлов, поэтому LtoR:

.. вы сейчас на хосте / устройстве,

.. вы сейчас на хосте

. вы все еще на хосте

setting вы сейчас на хосте / настройке

trigger вы сейчас на хосте / настройке / триггере

Если вы читаете RtoL, то вы должны понимать, что вместо следующих тестов узлов вы читаете каждый тест узла с противоположным значением, и ваш контекст - это то, где вы хотите оказаться, поэтому:

отhost/setting/trigger (желаемая конечная точка)

trigger (читается как ..), теперь вы находитесь на host/setting

setting (снова ..), высейчас на хосте

. (.), вы все еще на хосте

.. (читается как *), вы могли бы теперь бытьна хосте / устройстве

.. (читается как *) вы может теперь находиться на хосте / устройстве / элементе

...