代码之家  ›  专栏  ›  技术社区  ›  GarethAS

在XML数组的XMLNSC中使用ESQL设置属性

  •  0
  • GarethAS  · 技术社区  · 8 年前

    我成功地添加了一个 name="xxxxxx" 属性,但不适用于重复元素数组。

    例如,我可以创建一个 <Broker name="xxxxxx" &燃气轮机;具有以下行的元素:

    SET OutputRoot.XMLNSC.SystemDetails.BrokerDetails.Broker.(XMLNSC.Attribute)name = 
    FIELDVALUE(InputRoot.XMLNSC.broker.(XMLNSC.Attribute)name);
    

    并可以使用以下行创建XML元素数组:

    SET OutputRoot.XMLNSC.SystemDetails.BrokerDetails.Servers.Server[] = 
        SELECT ITEM FIELDVALUE(A.(XMLNSC.Attribute)name)
        FROM InputRoot.XMLNSC.broker.executionGroups.executionGroup[] AS A;
    

    其中给出:

    <SystemDetails>
         <BrokerDetails>
               <Broker name="xxxxxx" />
               <Servers>
                    <Server>xxx1</Server>
                    <Server>xxx2</Server>
                    <Server>xxx3</Server>
                    <Server>xxx4</Server>
               </Servers>
         </BrokerDetails>
    </SystemDetails>
    

    但无法将这两种方法结合起来创建我想要的内容,即:

    <SystemDetails>
         <BrokerDetails>
               <Broker name="xxxxxx" />
               <Servers>
                    <Server name="xxx1" />
                    <Server name="xxx2" />
                    <Server name="xxx3" />
                    <Server name="xxx4" />
               </Servers>
         </BrokerDetails>
    </SystemDetails>
    

    任何帮助都将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Rookwood Solutions    8 年前

    我无法在一个select语句中生成您的输出,但使用两个select语句是可能的。

    SET OutputRoot.XMLNSC.SystemDetails.BrokerDetails.Broker.(XMLNSC.Attribute)name = 
        SELECT ITEM R.(XMLNSC.Attribute)name FROM InputRoot.XMLNSC.broker AS R;  
    
    SET OutputRoot.XMLNSC.SystemDetails.BrokerDetails.Servers.Server[] =  
        SELECT FIELDVALUE(A.(XMLNSC.Attribute)name) AS (XMLNSC.Attribute)name FROM   
           InputRoot.XMLNSC.broker.executionGroups.executionGroup[] AS A;
    

    得出以下结果。

    <SystemDetails>
        <BrokerDetails>
            <Broker name="DEV.ADAP2B"/>
            <Servers>
               <Server name="JumpStart"/>
               <Server name="SMUDGER"/>
            </Servers>
        </BrokerDetails>
    </SystemDetails>  
    

    我不确定您是否可以在一个select语句中实现,因为您将代理元素的标量值与服务器的列表混合在一起。