0

有人可以帮助我在 IIB 中使用 ESQL 创建以下 xml 结构吗

输入:

<animal>
     <animaldomestic>dog<animaldomestic>
     <animalwild>cheetah<animalwild>
</animal>

输出:

<animals>
  <animal type="domestic">cow</animal>
  <animal type="wild">cheetah</animal>
</animals>
4

4 回答 4

4

SET OuputRoot.XMLNSC.animals.(XMLNSC.Attribute)animal = '国内'; SET OutputRoot.XMLNSC.animals.animal = '牛';

SET OuputRoot.XMLNSC.animals.(XMLNSC.Attribute)animal = 'wild'; SET OutputRoot.XMLNSC.animals.animal = '猎豹';

于 2017-01-25T08:42:15.480 回答
1

如果你想要通用代码:

DECLARE animal REFERENCE TO InputRoot.XMLNSC.animal.*[>];
DECLARE type CHAR;
DECLARE I INTEGER 1;
WHILE LASTMOVE(animal) DO
    SET type = SUBSTRING(FIELDNAME(animal) AFTER 'animal');
    SET OutputRoot.XMLNSC.animals.animal[I] = FIELDVALUE(animal);
    SET OutputRoot.XMLNSC.animals.animal[I].(XMLNSC.Attribute)type = type;
    SET I = I + 1;
    SET type = '';
    MOVE animal NEXTSIBLING; 
END WHILE;
于 2017-08-01T08:56:14.380 回答
1

我找到了解决方案。请找到以下代码:

SET OutputRoot.XMLNSC.animals.animal[1].(XMLNSC.Attribute)type = 'domestic';
SET OutputRoot.XMLNSC.animals.animal[1]VALUE = InputRoot.XMLNSC.animal.animaldomestic;
SET OutputRoot.XMLNSC.animals.animal[2].(XMLNSC.Attribute)type = 'wild';
SET OutputRoot.XMLNSC.animals.animal[2]VALUE = InputRoot.XMLNSC.animal.animalwild;
于 2017-01-16T09:57:29.857 回答
1

@Egorka_nazarov 的解决方案是最好的。但是,可以进行一些改进:

    FOR refAnimals AS InputRoot.XMLNSC.animal.*[];
      CREATE LASTCHILD OF OutputRoot.XMLNSC.animals 
        AS refNewAnimal
        TYPE NameValue 
        NAME 'animal' 
        VALUE FIELDVALUE(refAnimals);

      DECLARE type CHARACTER SUBSTRING(FIELDNAME(refAnimals) AFTER 'animal');
      SET refNewAnimal.(XMLNSC.Attribute)type = type;
    END FOR;

上面的代码更短,并且不太可能包含错误(显然,一旦您练习了 REFERENCE 变量)。

于 2019-11-21T23:35:28.493 回答