繁体   English   中英

通过 ABAP 简单转换在单个 XML 元素中使用多个命名空间

[英]Use multiple namespaces in single XML element through ABAP Simple Transformation

目前,对于我们提到命名空间前缀“etd”的所有元素,都会为它们打印链接(突出显示为绿色)。 输出 XML 文件如下所示:在此处输入图片说明

我希望输出看起来像:在此处输入图片说明

而不是打印所有元素的链接,我希望它只打印一次 - 在标题处(在元素“JPK”中,突出显示为绿色),就像默认命名空间一样。

您能否向我提供您宝贵的意见以纠正问题?

请找到我通过事务代码XSLT_TOOL创建的简单转换的代码:

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined">

  <tt:root name="ROOT" type="?"/>
  <tt:root name="VAT_DATA" type="ddic:ZZCVAT_DECLARATION_MAIN"/>
  <tt:template>
    <JPK xmlns="http://jpk.mf.gov.pl/wzor/2016/03/09/03094/"
         xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/">
      <NAGLOWEK>
        <KODFORMULARZA kodSystemowy="JPK_VAT (2)" tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.KODFORMULARZA" wersjaSchemy="1-0"/>
        <WARIANTFORMULARZA tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.WARIANTFORMULARZA"/>
        <CELZLOZENIA tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.CELZLOZENIA"/>
        <DATAWYTWORZENIAJPK tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.DATAWYTWORZENIAJPK"/>
        <DATAOD tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.DATAOD"/>
        <DATADO tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.DATADO"/>
        <DOMYSLNYKODWALUTY tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.DOMYSLNYKODWALUTY"/>
        <KODURZEDU tt:value-ref=".VAT_DATA.JPK.NAGLOWEK.KODURZEDU"/>
      </NAGLOWEK>
      <PODMIOT1>
        <IDENTYFIKATORPODMIOTU>
          <etd:NIP tt:value-ref=".VAT_DATA.JPK.PODMIOT1.IDENTYFIKATORPODMIOTU.NIP"/>
          <etd:PELNANAZWA tt:value-ref=".VAT_DATA.JPK.PODMIOT1.IDENTYFIKATORPODMIOTU.PELNANAZWA"/>
          <etd:REGON tt:value-ref=".VAT_DATA.JPK.PODMIOT1.IDENTYFIKATORPODMIOTU.REGON"/>
        </IDENTYFIKATORPODMIOTU>
        <ADRESPODMIOTU>
          <etd:KODKRAJU tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.KODKRAJU"/>
          <etd:WOJEWODZTWO tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.WOJEWODZTWO"/>
          <etd:POWIAT tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.POWIAT"/>
          <etd:GMINA tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.GMINA"/>
          <etd:ULICA tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.ULICA"/>
          <etd:NRDOMU tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.NRDOMU"/>
          <etd:MIEJSCOWOSC tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.MIEJSCOWOSC"/>
          <etd:KODPOCZTOWY tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.KODPOCZTOWY"/>
          <etd:POCZTA tt:value-ref=".VAT_DATA.JPK.PODMIOT1.ADRESPODMIOTU.POCZTA"/>
        </ADRESPODMIOTU>
      </PODMIOT1>
      <tt:loop ref=".VAT_DATA.JPK.SPRZEDAZWIERSZ">
        <SPRZEDAZWIERSZ typ="G">
          <LPSPRZEDAZY tt:value-ref="LPSPRZEDAZY"/>
          <NRKONTRAHENTA tt:value-ref="NRKONTRAHENTA"/>
          <NAZWAKONTRAHENTA tt:value-ref="NAZWAKONTRAHENTA"/>
          <ADRESKONTRAHENTA tt:value-ref="ADRESKONTRAHENTA"/>
          <DOWODSPRZEDAZY tt:value-ref="DOWODSPRZEDAZY"/>
          <DATAWYSTAWIENIA tt:value-ref="DATAWYSTAWIENIA"/>
          <DATASPRZEDAZY tt:value-ref="DATASPRZEDAZY"/>
          <K_10 tt:value-ref="K_10"/>
          <K_11 tt:value-ref="K_11"/>
          <K_12 tt:value-ref="K_12"/>
          <K_13 tt:value-ref="K_13"/>
          <K_14 tt:value-ref="K_14"/>
          <K_15 tt:value-ref="INNER_STR_31.K_15"/>
          <K_16 tt:value-ref="INNER_STR_31.K_16"/>
          <K_17 tt:value-ref="INNER_STR_32.K_17"/>
          <K_18 tt:value-ref="INNER_STR_32.K_18"/>
          <K_19 tt:value-ref="INNER_STR_33.K_19"/>
          <K_20 tt:value-ref="INNER_STR_33.K_20"/>
          <K_21 tt:value-ref="K_21"/>
          <K_22 tt:value-ref="K_22"/>
          <K_23 tt:value-ref="INNER_STR_34.K_23"/>
          <K_24 tt:value-ref="INNER_STR_34.K_24"/>
          <K_25 tt:value-ref="INNER_STR_35.K_25"/>
          <K_26 tt:value-ref="INNER_STR_35.K_26"/>
          <K_27 tt:value-ref="INNER_STR_36.K_27"/>
          <K_28 tt:value-ref="INNER_STR_36.K_28"/>
          <K_29 tt:value-ref="INNER_STR_37.K_29"/>
          <K_30 tt:value-ref="INNER_STR_37.K_30"/>
          <K_31 tt:value-ref="K_31"/>
          <K_32 tt:value-ref="INNER_STR_38.K_32"/>
          <K_33 tt:value-ref="INNER_STR_38.K_33"/>
          <K_34 tt:value-ref="INNER_STR_39.K_34"/>
          <K_35 tt:value-ref="INNER_STR_39.K_35"/>
          <K_36 tt:value-ref="K_36"/>
          <K_38 tt:value-ref="K_38"/>
          <K_39 tt:value-ref="K_39"/>
        </SPRZEDAZWIERSZ>
      </tt:loop>
      <SPRZEDAZCTRL>
        <LICZBAWIERSZYSPRZEDAZY tt:value-ref=".VAT_DATA.JPK.SPRZEDAZCTRL.LICZBAWIERSZYSPRZEDAZY"/>
        <PODATEKNALEZNY tt:value-ref=".VAT_DATA.JPK.SPRZEDAZCTRL.PODATEKNALEZNY"/>
      </SPRZEDAZCTRL>
      <tt:loop ref=".VAT_DATA.JPK.ZAKUPWIERSZ">
        <ZAKUPWIERSZ typ="G">
          <LPZAKUPU tt:value-ref="LPZAKUPU"/>
          <NRDOSTAWCY tt:value-ref="NRDOSTAWCY"/>
          <NAZWADOSTAWCY tt:value-ref="NAZWADOSTAWCY"/>
          <ADRESDOSTAWCY tt:value-ref="ADRESDOSTAWCY"/>
          <DOWODZAKUPU tt:value-ref="DOWODZAKUPU"/>
          <DATAZAKUPU tt:value-ref="DATAZAKUPU"/>
          <DATAWPLYWU tt:value-ref="DATAWPLYWU"/>
          <K_43 tt:value-ref="INNER_STR_51.K_43"/>
          <K_44 tt:value-ref="INNER_STR_51.K_44"/>
          <K_45 tt:value-ref="INNER_STR_52.K_45"/>
          <K_46 tt:value-ref="INNER_STR_52.K_46"/>
          <K_47 tt:value-ref="K_47"/>
          <K_48 tt:value-ref="K_48"/>
          <K_49 tt:value-ref="K_49"/>
          <K_50 tt:value-ref="K_50"/>
        </ZAKUPWIERSZ>
      </tt:loop>
      <ZAKUPCTRL>
        <LICZBAWIERSZYZAKUPOW tt:value-ref=".VAT_DATA.JPK.ZAKUPCTRL.LICZBAWIERSZYZAKUPOW"/>
        <PODATEKNALICZONY tt:value-ref=".VAT_DATA.JPK.ZAKUPCTRL.PODATEKNALICZONY"/>
      </ZAKUPCTRL>
    </JPK>
  </tt:template>
</tt:transform>

如果您希望命名空间声明出现在根元素而不是重复的子元素上,只需确保根元素(在创建它时)在范围内具有该命名空间。

如果您使用文字结果元素创建元素,只需向 LRE 添加一个命名空间声明,它就会被复制到输出中。

如果您使用 xsl:element 创建元素(并且如果您不能切换到使用 LRE),那么它会有点棘手。 在 XSLT 2.0 中,您可以使用 xsl:namespace 来完成。

如需更多建议,我们确实需要查看您的代码。

根据文档,您可以通过在 JPK 标签后添加<tt:namespace name="etd" />来实现这一点。

标准行为是为每个标签添加命名空间,从链接页面引用:

命名空间声明完全写入需要它的元素中。

用一个虚拟示例试了一下:

简单的转换代码:

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined">
  <tt:root line-type="ddic:ANLA" name="ROOT"/>
  <tt:template>
    <ROOT xmlns="http://jpk.mf.gov.pl/wzor/2016/03/09/03094/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/">
      <tt:namespace name="etd" />
      <tt:loop ref=".ROOT">
        <ANLA>
          <etd:BUKRS tt:value-ref="BUKRS"/>
          <ANLN1 tt:value-ref="ANLN1"/>
          <ANLN2 tt:value-ref="ANLN2"/>
        </ANLA>
      </tt:loop>
    </ROOT>
  </tt:template>
</tt:transform>

XML 结果:

<?xml version="1.0" encoding="UTF-8"?>
-<ROOT xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/" xmlns="http://jpk.mf.gov.pl/wzor/2016/03/09/03094/">    
    -<ANLA>
        <etd:BUKRS>1000</etd:BUKRS>
        <ANLN1>131234246</ANLN1>
        <ANLN2>0000</ANLN2>
    </ANLA>
</ROOT>

否则(如果您不使用提到的标签)结果是:

<?xml version="1.0" encoding="UTF-8"?>
-<ROOT xmlns="http://jpk.mf.gov.pl/wzor/2016/03/09/03094/">
   -<ANLA>
      <etd:BUKRS xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/">1000</etd:BUKRS>
      <ANLN1>131234245</ANLN1>
      <ANLN2>0000</ANLN2>
   </ANLA>
</ROOT>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM