2015-02-03 2 views
0

Say У меня есть последовательность элементов,захвата последовательности в пределах последовательности

<items> 
    <item>B</item> 
    <item>D</item> 
    <item>A</item> 
    <item>B</item> 
    <item>C</item> 
</items> 

, и я хочу, чтобы захватить все последовательности A- и B-элементы

<items> 
    <item>B</item> 
    <item>D</item> 
    <hit> 
     <item>A</item> 
     <item>B</item> 
    </hit> 
    <item>C</item> 
</items> 

это может быть сделано с XQuery? При итерации элемент контекста является единственным.

я могу получить

<items> 
    <item>B</item> 
    <item>D</item> 
    <hit-start><item>A</item></hit-start> 
    <hit-end><item>B</item></hit-end> 
    <item>C</item> 
</items> 

, но это не помогает, и не

<items> 
    <item>B</item> 
    <item>D</item> 
    <hit-start/> 
     <item>A</item> 
     <item>B</item> 
    <hit-end/> 
    <item>C</item> 
</items> 

ответ

1

Вы можете "осмотреться" с помощью preceding-sibling и following sibling.

<items>{ 
    for $item in $xml/items/item 
    return 
    if ($item = "A" and $item/following-sibling::item[1] = "B") 
    then (
     <hit-start/>, 
     <item>A</item>, 
     <item>B</item>, 
     <hit-end/> 
    ) 
    else 
     $item[not(preceding-sibling::item[1] = "A")] 
}</items> 
+0

Спасибо, @Jens ERAT, ' { за $ пункта в $ пунктов/пункт возврата если ($ пункт = "A" и $ пункт/следующий-родственный :: пункт [1] = "В"), то ( Б ) остальное $ пункт [нет (предшествующее-родственный :: элемент [1] = "A")]} ' ближе к тому, что я хочу. –

+0

С учетом разницы в выходе. Если это то, что вы ищете, вы также можете опустить круглые скобки вокруг ' ...'. –

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