在循环中提取xml值

时间:2013-05-09 08:43:40

标签: ibm-mq messagebroker

我有像

这样的xml
 <NS5:CAIAssembly> 
          <NS5:CAIComponent > 
            <NS5:CAICode>033144</NS5:CAICode> 
            <NS5:Quantity>1</NS5:Quantity> 
          </NS5:CAIComponent> 
          <NS5:CAIComponent > 
            <NS5:CAICode>048429</NS5:CAICode> 
            <NS5:Quantity>1</NS5:Quantity> 
          </NS5:CAIComponent> 
          <NS5:CAIComponent > 
            <NS5:CAICode>073528</NS5:CAICode> 
            <NS5:Quantity>1</NS5:Quantity> 
          </NS5:CAIComponent> 
          <NS5:CAIComponent > 
            <NS5:CAICode>563781</NS5:CAICode> 
            <NS5:Quantity>1</NS5:Quantity> 
          </NS5:CAIComponent> 
        </NS5:CAIAssembly>

我写的是想获得

的值
SET OutputRoot.XMLNSC.root.row[rowCnt].Kit_info.components.productCd = COALESCE(FIELDVALUE(orgObj.*:ListOfCAD.*:CAD.*:CADAssembly.*:CADComponent.*:CAICode[]),'0')||'_'||COALESCE(FIELDVALUE(orgObj.*:ListOfCAD.*:CAD.*:CADAssembly.*:CADComponent.*:CCIDCode[]),'0');
SET OutputRoot.XMLNSC.root.row[rowCnt].Kit_info.components.quantity = FIELDVALUE(orgObj.*:CAIAssembly.*:CAIComponent.*:Quantity[]); 

上面的代码给我的结果只有一个

<components> 
<productCd >033144_5423</productCd > 
<quantity>1</quantity> 
</components

&GT;

如何迭代值以获得所有类似

我尝试过While循环,但它无法正常工作

<components> 
<productCd >033144_5423</productCd > 
<quantity>1</quantity> 
</components> 
<components> 
<productCd >048429_5423</productCd > 
<quantity>1</quantity> 
</components> 
<components> 
<productCd >073528_5423</productCd > 
<quantity>1</quantity> 
</components> 
<components> 
<productCd >563781_5423</productCd > 
<quantity>1</quantity> 
</components>

谢谢大家。

1 个答案:

答案 0 :(得分:1)

这很容易实现。请尝试以下代码:

 DECLARE inputRef REFERENCE TO InputRoot.XMLNSC.NS5:CAIAssembly;

    DECLARE Ref_CAIComponent REFERENCE TO inputRef.NS5:CAIComponent[1];

    --Now run the below loop

        WHILE LASTMOVE(Ref_CAIComponent) DO

    CREATE FIELD OutputRoot.XMLNSC.components[index];
    DECLARE outRef REFERENCE TO OutputRoot.XMLNSC.components[index];
    SET index=index+1;

    SET outRef.productCd=Ref_CAIComponent.NS5:CAICode;
    SET outRef.quantity=Ref_CAIComponent.NS5:Quantity;


    MOVE Ref_CAIComponent NEXTSIBLING REPEAT NAME;
    END WHILE;

P.S。最好是自己努力寻找解决方案,而不是寻找勺子喂养。