Фильтрация "метаданных" -узлов из xpath-запроса в магнолии jcr - PullRequest
2 голосов
/ 15 декабря 2010

У меня проблема с фильтрацией определенных узлов крольчихи jcr в Магнолии.

когда я отправляю следующий запрос: //element(*, standort)//*

я получаю:

33 nodes returned in 18ms
/standort/Standorte/MetaData
/standort/Standorte/standort-de
/standort/Standorte/standort-de/MetaData
/standort/Standorte/standort-de/Teststandort
/standort/Standorte/standort-de/Teststandort/MetaData
/standort/Standorte/standort-de/Hauptwerk-Köln
/standort/Standorte/standort-de/Hauptwerk-Köln/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-Berlin
/standort/Standorte/standort-de/Geschäftsstelle-Berlin/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-Frankfurt
/standort/Standorte/standort-de/Geschäftsstelle-Frankfurt/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-Hamburg
/standort/Standorte/standort-de/Geschäftsstelle-Hamburg/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-Hannover
/standort/Standorte/standort-de/Geschäftsstelle-Hannover/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-Köln
/standort/Standorte/standort-de/Geschäftsstelle-Köln/MetaData
/standort/Standorte/standort-de/Werk-Leipzig
/standort/Standorte/standort-de/Werk-Leipzig/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-München
/standort/Standorte/standort-de/Geschäftsstelle-München/MetaData
/standort/Standorte/standort-de/Geschäftsstelle-Stuttgart
/standort/Standorte/standort-de/Geschäftsstelle-Stuttgart/MetaData
/standort/Standorte/standort-de/Gelsdorf-(Mischwerk)
/standort/Standorte/standort-de/Gelsdorf-(Mischwerk)/MetaData
/standort/Standorte/standort-de/Gelsdorf-(Handläufe)
/standort/Standorte/standort-de/Gelsdorf-(Handläufe)/MetaData
/standort/Standorte/standort-de/KB-Roller-Tech-Kopierwalzen-GmbH
/standort/Standorte/standort-de/KB-Roller-Tech-Kopierwalzen-GmbH/MetaData
/standort/Standorte/standort-en
/standort/Standorte/standort-en/MetaData
/standort/Standorte/standort-en/Böttcher-UK-Ltd-
/standort/Standorte/standort-en/Böttcher-UK-Ltd-/MetaData

Но я хочу только узлы:

/standort/Standorte/standort-de/Teststandort
/standort/Standorte/standort-de/Hauptwerk-Köln
/standort/Standorte/standort-de/Geschäftsstelle-Berlin
/standort/Standorte/standort-de/Geschäftsstelle-Frankfurt
/standort/Standorte/standort-de/Geschäftsstelle-Hamburg
/standort/Standorte/standort-de/Geschäftsstelle-Hannover
/standort/Standorte/standort-de/Geschäftsstelle-Köln
/standort/Standorte/standort-de/Werk-Leipzig
/standort/Standorte/standort-de/Geschäftsstelle-München
/standort/Standorte/standort-de/Geschäftsstelle-Stuttgart
/standort/Standorte/standort-de/Gelsdorf-(Mischwerk)
/standort/Standorte/standort-de/Gelsdorf-(Handläufe)
/standort/Standorte/standort-de/KB-Roller-Tech-Kopierwalzen-GmbH
/standort/Standorte/standort-en/Böttcher-UK-Ltd-

, таким образом, без узлов MetaData и родительских узлов .Мне нужно все под Standorte.Дочерние элементы Standorte могут быть типа standort-de или standort-en.Я надеюсь, что смогу прояснить мою проблему.Я сократил вывод в последней версии моего вопроса.До сих пор я не нашел ни одного xpath-выражения, которое могло бы мне помочь.Но это из-за моего недостатка знания xpath.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Использование :

(//element(*, standort)//*)[not(ancestor-or-self::MetaData)]
2 голосов
/ 15 декабря 2010

Выражение

//element(*, standort)//*

выбирает любой элемент (окончательный *), являющийся потомком (второй //) элемента в любом месте документа (//element()), который был успешно проверен по определению типа, определенному схемой для standort , (Спасибо @Alej за помощь исправить это утверждение и следующее.)

Таким образом, в основном вы выбираете каждый элемент, который является потомком проверенного элемента standort, при условии, что у вас есть схема, успешно присоединенная ..

Попробуйте выражение XPath ( обновлено ):

/standort/Standorte/(standort-de | standort-en)/*
...