2017-04-24 68 views
0

我對XSLT非常陌生並面臨一個問題。在xml的單個元素中使用多個名稱空間通過xslt

請找我通過交易代碼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> 

目前,對於我們所提到的命名空間前綴「ETD」的所有元素,鏈接打印他們(高亮綠色)。輸出XML文件的樣子: enter image description here

我想輸出的樣子: enter image description here

除了打印鏈接的所有元素,我希望它只是一次打印 - 在頭(以元素「JPK」突出顯示爲綠色),就像缺省名稱空間一樣。

您能否爲我提供寶貴的意見以糾正問題?

問候。

+1

請發佈**可重現的**示例,包括輸入,您當前的XSLT樣式表,以及期望的輸出**作爲代碼**,而不是圖片。上面顯示的不是一個「轉換」 - 事實上,它甚至不是一個格式良好的XML文檔。還要注意,命名空間聲明的放置及其重複的次數沒有意義,也不應該做任何與接收應用程序不同 –

回答

0

根據documentation,您可以通過在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> 
+0

謝謝,它解決了我的問題:) 我真的很感激,如果你能幫我一次。如果該字段沒有任何價值,是否可以防止在XML文件中打印空標籤? 例如:目前XML的特定部分被顯示爲: 2016年4月19日 2016年4月19日 1.000,00 1.000,00 我不想爲K_10,K_13和K_14空標籤,因爲它們沒有值顯示在XML文件中。 預先感謝您的時間和建議。 – Shreya

+0

使用[條件轉換](https://help.sap.com/saphelp_erp60_sp/helpdata/en/0c/402040abf2c442e10000000a1550b0/content.htm)。有一個「不初始」的檢查條件。示例在[this](https://archive.sap.com/discussions/thread/2043498)線程的第一條評論中。 – szako

+0

謝謝你的迴應,但我很抱歉,我無法理解/找到使用的確切語法。如果您可以與任何一個字段的條件轉換共享上面的代碼,我將不勝感激。 預先感謝您的幫助 – Shreya

0

如果您希望命名空間聲明出現在根元素而不是重複的子元素上,請確保根元素(當您創建它時)在該作用域中具有該名稱空間。

如果使用文字結果元素創建元素,只需將名稱空間聲明添加到LRE,並將其複製到輸出。

如果使用xsl:element創建元素(如果您不能切換到使用LRE),那麼它會更棘手。在XSLT 2.0中,你可以使用xsl:namespace來完成。

如需更多建議,我們確實需要查看您的代碼。

+0

我已更新我的問題。請找到我的完整代碼,併爲我提供解決問題的輸入。 – Shreya

+0

您的代碼似乎是用類似於XSLT的某種SAP轉換語言編寫的,但實際上並不是XSLT。我不知道這個SAP語言,所以我不能幫你。 –

+0

是的,它是一個SAP轉型。沒問題,謝謝你的時間和迴應:) – Shreya

相關問題