通过xslt在xml的单个元素中使用多个名称空间(use multiple namespace in single element of xml through xslt)
我对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”中,突出显示为绿色),就像默认名称空间一样。
你能否给我提供宝贵的意见,以纠正这个问题?
问候。
I am very new to XSLT and facing an issue.
Please find my code of transformation created through transaction code 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>
Currently, for all elements where we have mentioned namespace prefix "etd", link is printed for them (highlighted green). Output XML file looks like: enter image description here
I want output to look like: enter image description here
Instead of printing link for all elements, I want it to print only once - at header (in element "JPK", highlighted green), like the default namespace.
Could you please provide me your valuable inputs to correct the issue?
Regards.
原文:https://stackoverflow.com/questions/43585383
最满意答案
你可以尝试这样的事情,
df = df.rdd.zipWithIndex().map(lambda x: [x[1]] + [y for y in x[0]]).toDF(['Ident']+df.columns)
这将为您提供第一列作为您的标识符,其具有从0到N-1的连续值,其中N是以df为单位的记录总数。
You could try something like this,
df = df.rdd.zipWithIndex().map(lambda x: [x[1]] + [y for y in x[0]]).toDF(['Ident']+df.columns)
This will give you first column as your identifier which will have consecutive values starting from 0 to N-1, where N is total number of records in df.
相关问答
更多-
尝试一下 df1 = df1.withColumn('totaltime', sum(df1[col] for col in ["t1","t2","t3","t4","t5"])) Try this out df1 = df1.withColumn('totaltime', sum(df1[col] for col in ["t1","t2","t3","t4","t5"]))
-
如何向Spark DataFrame添加新列(使用PySpark)?(How do I add a new column to a Spark DataFrame (using PySpark)?)[2022-11-13]
您不能在Spark中为DataFrame添加任意列。 只能使用文字创建新列(其他文字类型在“ 如何在Spark DataFrame中添加常量列”中有描述)? from pyspark.sql.functions import lit df = sqlContext.createDataFrame( [(1, "a", 23.0), (3, "B", -23.0)], ("x1", "x2", "x3")) df_with_x4 = df.withColumn("x4", lit(0)) df_w ... -
为什么在352之后添加一个单调增加id中断的新id列(why adding a new id column with monotonically increasing id break after 352)[2021-11-05]
根据mic4ael的回答,生成的ID仅保证单调增加且唯一,但不是连续的。 您可以使用row_number生成连续且单调增加的ID,但是,此方法不能很好地扩展,应该避免使用较大的数据集。 例如,将此作为输入数据: from pyspark.sql.window import Window from pyspark.sql.functions import col,row_number df = spark.createDataFrame([('33004', ''),('33004', ''),('33010 ... -
您可以将列表转换为Row对象列表,然后使用spark.createDataFrame ,它将从您的数据中推断出架构: from pyspark.sql import Row R = Row('ID', 'words') # use enumerate to add the ID column spark.createDataFrame([R(i, x) for i, x in enumerate(my_data)]).show() +---+--------------------+ | ID| ...
-
感谢Gaurav Dhama提供了一个很好的答案! 我对他的解决方案做了一些改变。 这是我的解决方案,它将两个数据框连接在一起,添加了新的row_num列。 from pyspark.sql import Row def flatten_row(r): r_ = r.features.asDict() r_.update({'row_num': r.row_num}) return Row(**r_) def add_row_num(df): df_row_num = ...
-
python,pyspark:获得pyspark dataframe列值的总和(python, pyspark : get sum of a pyspark dataframe column values)[2022-03-31]
Spark SQL为列函数pyspark.sql.functions提供了专用模块。 所以它的工作方式是: from pyspark.sql import functions as F data = spark.createDataFrame([("abc", 20, "A"), ("def", 30, "B")],["name", "age", "city"]) res = data.unionAll( data.select([ F.lit('All').alias('name ... -
使用itertuples将单行插入单调递增的数据框中(pandas inserting rows in a monotonically increasing dataframe using itertuples)[2022-04-13]
一次有问题。 您可以逐字检查df.data.is_monotonic_increasing 。 插入新的指数:最好反过来。 你已经知道你想要的索引。 它由range(min_val, max_val+1, 100) 。 您可以使用此索引创建一个空白DataFrame并使用您的数据更新它。 这可能是内存密集型的,所以你可能需要大块地浏览你的数据。 在这种情况下,您可能需要提前提供索引范围。 import pandas as pd # test data df = pd.read_csv( pd.co ... -
你可以尝试这样的事情, df = df.rdd.zipWithIndex().map(lambda x: [x[1]] + [y for y in x[0]]).toDF(['Ident']+df.columns) 这将为您提供第一列作为您的标识符,其具有从0到N-1的连续值,其中N是以df为单位的记录总数。 You could try something like this, df = df.rdd.zipWithIndex().map(lambda x: [x[1]] + [y for y in x[ ...
-
如果两个列值在另一个数据框中,如何在pyspark中添加列?(How to add a column in pyspark if two column values is in another dataframe?)[2023-03-03]
可以通过先在两个数据帧上进行左外连接,然后when右数据帧的某列上使用when和otherwise函数。 这里是我试过的完整解决方案 - from pyspark.sql import functions as F from pyspark.sql.functions import col # this is just data input data1 = [[4,3,3],[2,4,3],[4,2,4],[4,3,3]] data2 = [[4,3,3],[2,3,3],[4,1,4]] # crea ... -
根据您的要求,一种方法是使用row_number Window函数: import org.apache.spark.sql.functions._ import org.apache.spark.sql.expressions.Window val df = Seq( 1, 2, 2, 3, 3, 3 ).toDF("col_value") val window = Window.partitionBy("col_value").orderBy("col_value") df.withColumn ...