2015-04-12 6 views
0

Как заменить XML-результат для отдельного значения?Заменить XML Distinct-Values ​​Oracle Service Bus 11G с использованием Xquery

Я получаю значение groupId, но я хочу заменить его на groupName, который может быть прочитан Клиентом, а не только Номер.

<TestList> 
 
    <Test> 
 
    <number>1000</number> 
 
    <groupId>2323</groupId> 
 
    </Test> 
 
    <Test> 
 
    <number>2000</number> 
 
    <groupId>3434</groupId> 
 
    </Test> 
 
    <Test> 
 
    <number>3000</number> 
 
    <groupId>2323</groupId> 
 
    </Test> 
 
    <Test> 
 
    <number>4000</number> 
 
    <groupId>4444</groupId> 
 
    </Test> 
 
</TestList>

Ожидаемый результат

<TestList> 
 
    <Test> 
 
    <number>1000</number> 
 
    <groupId>Group 1</groupId> 
 
    </Test> 
 
    <Test> 
 
    <number>2000</number> 
 
    <groupId>Group 2</groupId> 
 
    </Test> 
 
    <Test> 
 
    <number>3000</number> 
 
    <groupId>Group 1</groupId> 
 
    </Test> 
 
    <Test> 
 
    <number>4000</number> 
 
    <groupId>Group 3</groupId> 
 
    </Test> 
 
</TestList>

Спасибо,

Андрее

ответ

0

В 11 г, я думаю, вы можете использовать группу BEA по расширению. Попробуйте примерно следующее:

declare variable $data := 
<TestList> 
    <Test> 
    <number>1000</number> 
    <groupId>2323</groupId> 
    </Test> 
    <Test> 
    <number>2000</number> 
    <groupId>3434</groupId> 
    </Test> 
    <Test> 
    <number>3000</number> 
    <groupId>2323</groupId> 
    </Test> 
    <Test> 
    <number>4000</number> 
    <groupId>4444</groupId> 
    </Test> 
</TestList>; 

<TestList>{ 
    let $groups := 
    for $test in $data/Test 
    group $test as $testGroup by $test/groupId as $groupId 
    return 
     <group>{$testGroup}</group> 
    for $group at $pos in $groups, 
     $test in $group/Test 
    return 
    <Test> 
     {$test/number} 
     <groupId>{$pos}</groupId> 
    </Test> 
}</TestList>