2017-02-14 3 views
1

Мне нужно получить все текущие значения определенного узла. Я нашел this ответил на вопрос. Мой XML-файл выглядит по-другому. Таким образом, у меня есть несколько элементов с одинаковыми именами ..XQuery: Как выбрать уникальные узлы

<instance> 
    <value>0</value> 
    <value>0.72</value> 
    <value>0</value> 
    <value>0.72</value> 
    <value>2</value> 
    <value>22</value> 
    </instance> 
    <instance> 
    <value>10000000</value> 
    <value>0.72</value> 
    <value>0</value> 
    <value>0.72</value> 
    <value>1</value> 
    <value>22</value> 
    </instance> 
    <instance> 
    <value>20000000</value> 
    <value>0.64</value> 
    <value>-0.04</value> 
    <value>0.68</value> 
    <value>1</value> 
    <value>22</value> 
    </instance> 

После запроса выбор каждого 5th значения:

new XQuery("doc('database/dataset.xml')/dataset/body/instances/instance/value[5]") 

С результатом:

<value>2</value> 

<value>1</value> 

<value>1</value> 

Как я могу включить принятые ответ связанного вопроса, чтобы получить требуемый результат:

<value>2</value> 

<value>1</value> 

ответ

0

Я хотел бы также предложить альтернативный ответ, так как это XQuery, которая позволяет конструкторы элементов. Но это работает только в том случае, если идентичность узлов не имеет значения:

for $value in distinct-values(
    doc('database/dataset.xml')/dataset/body/instances/instance/value[5] 
) 
return <value>{$value}</value> 
+0

Ух ты, это очень быстрый подход !. Я склонен принять это ... (даже если первый ответ отвечает на точный вопрос ..) Поскольку первый из них, похоже, создает намного больше накладных расходов (он работает в исключении (выбрасывается из базы данных XML). Я не понял, почему)). спасибо – Jan

0

Я думаю, что это будет выглядеть как

doc('database/dataset.xml') 
/dataset 
/body 
/instances 
/instance[ not(value[5] = preceding-sibling::instance/value[5]) ] 
/value[5] 

(с использованием отредактированного принятого ответом трюка)