读取标签< PACKAGE>的值.如何? [英] Read value of tag <PACKAGE>. How?

查看:123
本文介绍了读取标签< PACKAGE>的值.如何?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

<TASKDATA>
<PACKAGE>BADI BS Aggr Profit Centers to Entity</PACKAGE>
<TEAM/>
<GROUP>Financial Process</GROUP>
<APPSET>OneMIS_DEV</APPSET>
<APPLICATION>Planning_DEV</APPLICATION>
<ANSWERPROMPT>%SELECTION% 
|DIMENSION:CATEGORY|AC0|DIMENSION:P_ENTITY||10DIMENSION:TIME|2019.09
%SELECTION_KEYDATE% </ANSWERPROMPT>
</TASKDATA>
</LINK_PROCESS>
<LINK_PROCESS LINK_TYPE="BPC_PACKAGE">
<PROPERTY NAME="NAME">Deconsolidation</PROPERTY>
<PROPERTY NAME="DESCRIPTION">Deconsolidation (Static Comp Code 
Filter)</PROPERTY>
<PROPERTY NAME="ID">583FA498C7BE45D4BECFF0F73FADA10B</PROPERTY>
<TASKDATA>
<PACKAGE>Deconsolidation</PACKAGE>
<TEAM/>
<GROUP>Financial Process</GROUP>
<APPSET>OneMIS_DEV</APPSET>
<APPLICATION>Planning_DEV</APPLICATION>
<ANSWERPROMPT>%SELECTION%
|DIMENSION:CATEGORY|AC0|DIMENSION:P_ENTITY|CZ20|27DIMENSION:TIME|2019.09 %SELECTION_KEYDATE% </ANSWERPROMPT>
</TASKDATA>

我只需要选择标签Deconsolidation下的字符串P_ENTITY.例如,在示例中,必须跳过第9行的字符串P_ENTITY,因为上面有标签BADI BS Aggr实体的利润中心.另一方面,必须选择第26行的字符串P_ENTITY,因为上面有标签Deconsolidation我该怎么办?.

I need to select only the strings P_ENTITY which are under the tag Deconsolidation. For example in the example the string P_ENTITY at row 9 must be skipped because above there is the tag BADI BS Aggr Profit Centers to Entity. On the other side the string P_ENTITY at row 26 must be selected because above there is the tag Deconsolidation How can I do?.

我尝试使用正则表达式P_ENTITY.{1,1}([A-Z]{2}[0-9]{2},*)*,但它会选择所有P_ENTITY字符串.

I have tried with the regex P_ENTITY.{1,1}([A-Z]{2}[0-9]{2},*)* but it selects all P_ENTITY strings.

推荐答案

假设您具有完全有效的XML,则您的XML具有用于<LINK_PROCESS>标签的包装父标签

Provided you have fully valid XML, your XML has wrapping parent tag for <LINK_PROCESS> tags

<LINKS>
    <LINK_PROCESS LINK_TYPE="BPC_PACKAGE">
        <TASKDATA>
            <PACKAGE>BADI BS Aggr Profit Centers to Entity</PACKAGE>
            <TEAM/>
            <GROUP>Financial Process</GROUP>
            <APPSET>OneMIS_DEV</APPSET>
            <APPLICATION>Planning_DEV</APPLICATION>
            <ANSWERPROMPT>%SELECTION% |DIMENSION:CATEGORY|AC0|DIMENSION:P_ENTITY||10DIMENSION:TIME|2019.09%SELECTION_KEYDATE% </ANSWERPROMPT>
        </TASKDATA>
    </LINK_PROCESS>
    <LINK_PROCESS LINK_TYPE="BPC_PACKAGE">
        <PROPERTY NAME="NAME">Deconsolidation</PROPERTY>
        <PROPERTY NAME="DESCRIPTION">Deconsolidation (Static Comp Code Filter)</PROPERTY>
        <PROPERTY NAME="ID">583FA498C7BE45D4BECFF0F73FADA10B</PROPERTY>
        <TASKDATA>
            <PACKAGE>Deconsolidation</PACKAGE>
            <TEAM/>
            <GROUP>Financial Process</GROUP>
            <APPSET>OneMIS_DEV</APPSET>
            <APPLICATION>Planning_DEV</APPLICATION>
            <ANSWERPROMPT>%SELECTION%|DIMENSION:CATEGORY|AC0|DIMENSION:P_ENTITY|CZ20|27DIMENSION:TIME|2019.09 %SELECTION_KEYDATE% </ANSWERPROMPT>
        </TASKDATA>
    </LINK_PROCESS>
</LINKS>

您可以使用以下ST转换zdecon

you can parse your XML with below ST transformation zdecon

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" template="main">
  <tt:root name="ROOT"/>
  <tt:template name="main">
   <LINKS>
    <tt:loop name="line" ref="ROOT">
      <LINK_PROCESS>
      <tt:skip name="PROPERTY" count="*" />
        <TASKDATA>
          <PACKAGE>
            <tt:value ref="package"/>
          </PACKAGE>
          <tt:skip count="4"/>
          <ANSWERPROMPT>
            <tt:value ref="answer"/>
          </ANSWERPROMPT>
        </TASKDATA>
      </LINK_PROCESS>
    </tt:loop>
    </LINKS>
  </tt:template>
</tt:transform>

并在ABAP中这样称呼它:

and call it like this in ABAP:

TYPES: BEGIN OF entity,
        package TYPE string,
        answer TYPE string,
      END OF entity,
      tt_entities TYPE STANDARD TABLE OF entity WITH DEFAULT KEY.

DATA: xml_string TYPE string.
DATA: tab        TYPE tt_entities.

xml_string = ` <LINKS><LINK_PROCESS LINK_TYPE="BPC_PACKAGE"> ` &&
` <TASKDATA> ` &&
...
`   </TASKDATA> ` &&
`   </LINK_PROCESS></LINKS>`.

CALL TRANSFORMATION zdecon
             SOURCE XML xml_string
             RESULT root = tab.

DELETE tab WHERE package <> 'Deconsolidation'.

LOOP AT tab ASSIGNING FIELD-SYMBOL(<line>).
  SPLIT <line>-answer AT '|' INTO TABLE DATA(deconsolidations).
  FIND REGEX '.+P_ENTITY' IN TABLE deconsolidations MATCH LINE DATA(l).
  WRITE: deconsolidations[ l + 1 ].
ENDLOOP.

为您的XML做出的几个假设:

Several assumptions that have been made for your XML:

  1. <PROPERTY>标签是任意的,可能会丢失

  1. <PROPERTY> tag is arbitrary and may be missing

<ANSWERPROMPT>标签包含%SELECTION%占位符包裹的尺寸列表

<ANSWERPROMPT> tag contains list of dimensions wrapped in %SELECTION% placeholders

每个维度都以|DIMENSION:<dim_name>|<dim_value>|

DIMENSION关键字前的随机数无关紧要,可以忽略

Random numbers before DIMENSION keyword are insignificant and can be ignored

27 维度:时间

这篇关于读取标签&lt; PACKAGE&gt;的值.如何?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆