2010-12-15 1 views
2

У меня есть проблема фильтрации определенных узлов jabrabbit jcr в магнолии.Фильтрация «MetaData» -нодов из xpath-запроса в магнолии 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- 

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

Заранее благодарен!

+0

Странный результат! Он также должен выбрать `/ standort/Standorte`. Если вы работаете с PSVI, почему бы вам не добавить аннотацию типа «Teststandort»? – 2010-12-15 13:43:49

+0

@Alejandro: Хм, я не знаю. возможно, xpath работает при выборе узлов в jackrabbit. – meltac 2010-12-15 15:05:35

+0

Затем элемент `Standorte` имеет аннотацию типа` standort`, и результат сообщает полный абсолютный путь выбранных узлов. – 2010-12-15 15:20:14

ответ

2

Выражение

//element(*, standort)//* 

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

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

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

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

Используйте:

(//element(*, standort)//*)[not(ancestor-or-self::MetaData)] 

 Смежные вопросы

  • Нет связанных вопросов^_^