1

私はOSM7.2.0.3 を使用しOrder Recognition Ruleており、Order Data Rule([変換] タブ内に)が付いたカートリッジがあります。

ODR には、次の XQuery コードがあります。

declare namespace im="http://xxx"; 
declare namespace xs="http://www.w3.org/2001/XMLSchema";

declare variable $ord :=  fn:root(.)/im:Order;

<_root>
  <Order>
  {
    for $moli in $ord/MainOrderLineItem
      return 
        $moli/LineItemAttributeInfo/LineItemAttribute
  }
 </Order>
</_root>

OSM への XML 入力は次のとおりです。

<ord:CreateOrder
    xmlns:ord="http://xmlns.oracle.com/communications/ordermanagement">
    <im:Order xmlns:im="http://xxx"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.oracle.com/communications/sce/dictionary/BaseOrderCommonCartridge/DataDictionary_BaseOrderCommon ../dataDictionary/DataDictionary_BaseOrderCommon.xsd">

      <OrderHeader>
        <OrderID>12345</OrderID>
        <RevisionNumber>1</RevisionNumber>
      </OrderHeader>

      <MainOrderLineItem>
        <LineItemAttributeInfo>
          <LineItemAttribute>
            <AttributeID>1234</AttributeID>
          </LineItemAttribute>
        </LineItemAttributeInfo>
      </MainOrderLineItem>
      <MainOrderLineItem>
        <LineItemAttributeInfo>
          <LineItemAttribute>
            <AttributeID>5678</AttributeID>
          </LineItemAttribute>
        </LineItemAttributeInfo>
      </MainOrderLineItem>
      <MainOrderLineItem>
        <LineItemAttributeInfo>
          <LineItemAttribute>
            <AttributeID>abcd</AttributeID>
          </LineItemAttribute>
        </LineItemAttributeInfo>
      </MainOrderLineItem>

    </im:Order>
</ord:CreateOrder>

は 3 回出現<MainOrderLineItem>しますが、出力は 1 つだけです。

<LineItemAttribute xmlns:im="http://xxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <AttributeID>1234</AttributeID>
</LineItemAttributeInfo>

なぜループしないのですか?

返信ありがとうございます。

4

3 に答える 3

0

問題はここにあります:

declare variable $ord :=  fn:root(.)/im:Order;

でなければなりません:

declare variable $ord :=  fn:root(.)/*/im:Order;
于 2012-10-23T13:15:21.700 に答える
0

これはおそらく返信が遅すぎますが、問題は for ステートメントのノード選択式にあった可能性が最も高いです。複数の MainOrderLineItems を選択する正しい方法:

for $moli in $ord//MainOrderLineItem

$ord の後の二重スラッシュに注意してください

'/abcde' パス式は、ルート要素 'abcde' を選択します

'parent//abcde' パス式は、親の下にある 'abcde' という名前のすべての子要素を選択します

複数の MainOrderLineItem ノードが存在するため、パス式には「//」を含める必要があります。

于 2014-03-31T11:33:42.253 に答える