2016-04-26 5 views
0

, если я использую следующий запросXquery Как я могу получить xml-файл со всеми узлами, используя фильтрацию в нескольких элементах?

collection('vagelisdb')[SensorInfo/Position/x>4] 

я могу получить все nodesof XML, что FULLFILL мои ожидания х> 4

, но он не работает, я хочу, чтобы фильтровать в еще одном узле, глубже

collection('vagelisdb')[SensorInfo/Position/x>4/anothernodename/y<2] 

Я хочу получать только те узлы, которые FULLFILL х> 4, и у < 2 ожидания, но я хочу все XML. Это означает также узлы, начиная с SensorInfo

Для того, чтобы дать некоторые подробности XML-, как это

<SensorInfo> 
    <Position> 
     <x>2</x> 
     <anothernodename> 
      <y>3</y> 
     </anothernodename> 
    </Position> 
    <Position> 
     <x>5</x> 
     <anothernodename> 
      <y>1</y> 
     </anothernodename> 
    </Position> 
</SensorInfo> 

И я хочу получить

<SensorInfo> 
    <Position> 
     <x>5</x> 
     <anothernodename> 
      <y>1</y> 
     </anothernodename> 
    </Position> 
</SensorInfo> 

ответ

1

Просто используйте and:

collection('vagelisdb')[SensorInfo/Position/x>4 and SensorInfo/Position/anothernodename/y<2] 
+0

Это не похоже на работу. Он возвращает все данные, не принимая во внимание, если y <2. Я хотел бы получить только SensorInfo, который имеет x> 4 и y <2. – vagelis

+0

@vagelis Вы не указали достаточно информации, чтобы узнать, что XPath использовать. Мой ответ был обновлен, чтобы отразить обновления вашего вопроса. – wst

0

Чтобы выбрать нулевые узлы Position: collection('vagelisdb')/SensorInfo/Position[x>4 and anothernodename/y<2]

Чтобы обернуть эти результаты в SensorInfo элемента можно использовать element SensorInfo { collection('vagelisdb')/SensorInfo/Position[ x>4 and anothernodename/y<2] }

+0

Проблема в том, что у меня есть объявления пространств имен в элементе SensorInfo, а затем я получаю объявления пространств имен в элементе Position – vagelis

+0

Это может раздражать, но эти неиспользуемые объявления пространства имен не нанесут никакого вреда. Если вы должны удалить их по какой-либо причине, вы можете использовать такую ​​функцию, как 'strip-ns', см. [Xquery-how-to-remove-unused-namespace-in-xml-node] (http://stackoverflow.com/questions/ 23002655/XQuery-хау к-удалить неиспользуемые-имена-в-XML-узел) –