2015-04-12 58 views
0

如何将XML结果替换为不同的值大小写?使用Xquery替换XML Distinct-Values Oracle Service Bus 11G

我得到的值groupId但我想将其替换为groupName,客户可以读取它,而不仅仅是Number。

<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>

感谢,

ANDREE

回答

0

在11g中,我认为您可以通过扩展使用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>