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 回答
0

我刚刚使用了您的 XQuery 并进行了检查,没问题。尝试在控制台中打印出 $ord 变量,以查看您在 OSM 中实际得到的内容。

这是我在任何 XQuery ide 中尝试过的:

declare namespace im="http://xxx"; 

declare variable $ord1 := <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>;

let $ord := $ord1/im:Order

return
(
    for $moli in $ord/MainOrderLineItem
      return 
        $moli/LineItemAttributeInfo/LineItemAttribute
)

结果只是预期的..

<LineItemAttribute xmlns:im="http://xxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ord="http://xmlns.oracle.com/communications/ordermanagement">
  <AttributeID>1234</AttributeID>
</LineItemAttribute>
<LineItemAttribute xmlns:im="http://xxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ord="http://xmlns.oracle.com/communications/ordermanagement">
  <AttributeID>5678</AttributeID>
</LineItemAttribute>
<LineItemAttribute xmlns:im="http://xxx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ord="http://xmlns.oracle.com/communications/ordermanagement">
  <AttributeID>abcd</AttributeID>
</LineItemAttribute>
于 2016-07-05T02:54:50.670 回答