0

私のxmlは次のようになります

- <ItemMaster> 
     - <ItemMasterHeader> 
        + <ItemID> 
        + <ItemStatus> 
        + <UserArea> 
         - <Classification Type="HOMOLOGATION CLASS"> 
           - <Codes> 
             <Code>E</Code> 
           </Codes> 
         </Classification> 
       + <Classification Type="LP"> 
       + <Classification> 
        - <Classification Type="BRAND"> 
          - <Codes> 
              <Code>002</Code> 
          </Codes> 
        </Classification> 

完全な xml はこちらhttp://www.speedyshare.com/MgCCA/download/ItemMaster-2.xml

属性TYPE = "BRAND"で分類の値を取得する必要がありますが、以下のコードでは、属性TYPE = "HOMOLOGATION CLASS"の分類のみを取得します。これは、「BRAND」を呼び出しているため、不要です。LASTMOVE を適用しようとしましたが、機能しません。どこが間違っているか教えてください。

タイプ「LP」内のコードなど、他の値もフェッチする必要があります。

DECLARE rResource REFERENCE TO InputRoot.XMLNSC.*:SyncItemMaster.*:DataArea.*:ItemMaster.*:ItemMasterHeader[1]; 
      SET rowCnt = rowCnt+1;       
      DECLARE LineCount INTEGER 1; 

      WHILE LASTMOVE(rResource) = TRUE DO    
      SET OutputRoot.XMLNSC.root.row[rowCnt].product_Info.TyreBrandCd = THE (SELECT  ITEM FIELDVALUE(T) FROM itemMaster.*:ItemMasterHeader[LineCount].*:Classification.*:Codes.*:Code AS T WHERE FIELDVALUE(itemMaster.*:ItemMasterHeader[LineCount].*:Classification.(XMLNSC.Attribute)Type) = 'BRAND'); 
            SET LineCount = LineCount + 1; 
      MOVE rResource NEXTSIBLING REPEAT TYPE NAME; 
       END WHILE;             
   RETURN TRUE; 
   END;

ありがとう

以下の提案されたコードで試してみました

ここにトレースログがあります

2013-05-10 18:32:27.218385 7732 UserTrace BIP2537I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Executing statement ''SET temp = THE (SELECT T.Classification AS :Classification FROM myref AS T WHERE FIELDVALUE(T.Classification.(XMLNSC.Attribute)Type) = 'BRAND');'' at ('.WMB_9D1_PROD_SUB00_001.Main', '22.3').
2013-05-10 18:32:27.218393 7732 UserTrace BIP2538I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Evaluating expression ''THE (SELECT T.Classification AS :Classification FROM myref AS T WHERE FIELDVALUE(T.Classification.(XMLNSC.Attribute)Type) = 'BRAND')'' at ('.WMB_9D1_PROD_SUB00_001.Main', '22.14').
2013-05-10 18:32:27.218400 7732 UserTrace BIP2572W: Node: 'WMB_9D1_PROD_SUB00_001.9D1_PROD': ('.WMB_9D1_PROD_SUB00_001.Main', '22.14') : Finding one and only SELECT result.
2013-05-10 18:32:27.218427 7732 UserTrace BIP2539I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Evaluating expression ''myref'' at ('.WMB_9D1_PROD_SUB00_001.Main', '22.48'). This resolved to ''myref''. The result was ''ROW... Root Element Type=16777216 NameSpace='' Name='ItemMasterHeader' Value=NULL''.
2013-05-10 18:32:27.218437 7732 UserTrace BIP2539I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Evaluating expression ''XMLNSC.Attribute'' at ('.WMB_9D1_PROD_SUB00_001.Main', '22.94'). This resolved to ''XMLNSC.Attribute''. The result was ''1095266992384''.
2013-05-10 18:32:27.218446 7732 UserTrace BIP2540I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Finished evaluating expression ''FIELDVALUE(T.Classification.(XMLNSC.Attribute)Type)'' at ('.WMB_9D1_PROD_SUB00_001.Main', '22.65'). The result was '''HOMOLOGATION CLASS'''.
2013-05-10 18:32:27.218454 7732 UserTrace BIP2539I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Evaluating expression ''FIELDVALUE(T.Classification.(XMLNSC.Attribute)Type) = 'BRAND''' at ('.WMB_9D1_PROD_SUB00_001.Main', '22.117'). This resolved to '''HOMOLOGATION CLASS' = 'BRAND'''. The result was ''FALSE''.
2013-05-10 18:32:27.218461 7732 UserTrace BIP2569W: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': ('.WMB_9D1_PROD_SUB00_001.Main', '22.14') : WHERE clause evaluated to false or unknown. Iterating FROM clause.
2013-05-10 18:32:27.218469 7732 UserTrace BIP2570W: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': ('.WMB_9D1_PROD_SUB00_001.Main', '22.14') : There were no items in the FROM clause satisfying the WHERE clause.
2013-05-10 18:32:27.218503 7732 UserTrace BIP2567I: Node 'WMB_9D1_PROD_SUB00_001.9D1_PROD': Assigning NULL to ''temp'', thus deleting it.
4

2 に答える 2

0

お探しのマッピングの種類がわかりません。あなたが望むのは、各「ItemMasterHeader」の正しい属性を持つ「分類」の(一意の)「コード」であり、個別の「行」フォルダー内の出力に存在することであると仮定すると、コードは次のとおりです。

CREATE PROCEDURE ExtractTyreCodes() BEGIN
        DECLARE rOutput REFERENCE TO OutputRoot;
        DECLARE rResource REFERENCE TO InputRoot.XMLNSC.*:SyncItemMaster.*:DataArea.*:ItemMaster;
        CREATE FIELD OutputRoot.XMLNSC.root AS rOutput;
        IF LASTMOVE(rResource) THEN 
        SET rOutput.row[] = SELECT 
                THE(SELECT C.*:Codes.*:Code AS TyreBrand
                    FROM T.*:Classification[] AS C 
                    WHERE C.(XMLNSC.Attribute)Type = 'BRAND') AS product_Info
                FROM rResource.*:ItemMasterHeader[] AS T;
        END IF;
END;

このメッセージから始めます:

<SyncItemMaster>
  <DataArea>
    <ItemMaster>
      <ItemMasterHeader>
        <ItemID/>
        <ItemStatus/>
        <UserArea/>
        <Classification Type="HOMOLOGATION CLASS">
          <Codes>
            <Code>E</Code>
          </Codes>
        </Classification>
        <Classification Type="LP"/>
        <Classification/>
        <Classification Type="BRAND">
          <Codes>
            <Code>002</Code>
          </Codes>
        </Classification>
      </ItemMasterHeader>
      <ItemMasterHeader>
        <ItemID/>
        <ItemStatus/>
        <UserArea/>
        <Classification Type="HOMOLOGATION CLASS">
          <Codes>
            <Code>F</Code>
          </Codes>
        </Classification>
        <Classification Type="LP"/>
        <Classification/>
        <Classification Type="BRAND">
          <Codes>
            <Code>005</Code>
          </Codes>
        </Classification>
      </ItemMasterHeader>
    </ItemMaster>
  </DataArea>
</SyncItemMaster>

次のメッセージが表示されます。

<root>
  <row>
    <product_Info>
      <TyreBrand>002</TyreBrand>
    </product_Info>
  </row>
  <row>
    <product_Info>
      <TyreBrand>005</TyreBrand>
    </product_Info>
  </row>
</root>

これにより、「ItemMasterHeader」ごとに「行」フォルダーが生成され、各「product_Info」フォ​​ルダー内に配置され、その中に (属性)「タイプ」=「BRAND」の「分類」からのコードが配置されます。

お役に立てれば。よろしく、

于 2013-05-11T19:06:27.723 に答える