【发布时间】:2021-09-11 16:02:08
【问题描述】:
我希望将数据从 XML 转换为 CSV。下面是 XML 数据。
请注意,其中一个元素本身包含逗号 (COMPONENT_DESCRIPTION)。 P_OUT_PUT_S3_DATA_ITEM 是重复元素。
<P_OUT_PUT_S3_DATA>
<P_OUT_PUT_S3_DATA_ITEM>
<RECEIPT_DATE>02-APR-21</RECEIPT_DATE>
<AWS_ASSET_ID>12345</AWS_ASSET_ID>
<RACK_PO_NUMBER>US12345</RACK_PO_NUMBER>
<VENDOR_NAME>Foxconn</VENDOR_NAME>
<MANUFACTURING_SITE>FOX-SLC</MANUFACTURING_SITE>
<COMPONENT_CATEGORY>CPU</COMPONENT_CATEGORY>
<COMPONENT_DESCRIPTION>CPU, Intel, Cascade Lake, 8259CL, 24C, 210W</COMPONENT_DESCRIPTION>
<APN>1</APN>
<COMP_VOL>76</COMP_VOL>
</P_OUT_PUT_S3_DATA_ITEM>
<P_OUT_PUT_S3_DATA_ITEM>
<RECEIPT_DATE>02-APR-21</RECEIPT_DATE>
<AWS_ASSET_ID>23456</AWS_ASSET_ID>
<RACK_PO_NUMBER>US23456</RACK_PO_NUMBER>
<VENDOR_NAME>Foxconn</VENDOR_NAME>
<MANUFACTURING_SITE>FOX-SLC</MANUFACTURING_SITE>
<COMPONENT_CATEGORY>CPU</COMPONENT_CATEGORY>
<COMPONENT_DESCRIPTION>CPU, Intel, Cascade Lake, 8259CL, 24C, 210W</COMPONENT_DESCRIPTION>
<APN>1</APN>
<COMP_VOL>76</COMP_VOL>
</P_OUT_PUT_S3_DATA_ITEM>
</P_OUT_PUT_S3_DATA>
期望的输出
RECEIPT_DATE,AWS_ASSET_ID,RACK_PO_NUMBER,VENDOR_NAME,MANUFACTURING_SITE,COMPONENT_CATEGORY,COMPONENT_DESCRIPTION,APN,COMP_VOL
02-APR-21,12345,US12345,Foxconn,FOX-SLC,CPU,"CPU, Intel, Cascade Lake, 8259CL, 24C, 210W",1,76
02-APR-21,23456,US23456,Foxconn,FOX-SLC,CPU,"CPU, Intel, Cascade Lake, 8259CL, 24C, 210W",1,76
XSLT-
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:sequence select=
"for $b in /*/P_OUT_PUT_S3_DATA_ITEM
return
concat(escape-html-uri(string-join(($b/RECEIPT_DATE,
$b/AWS_ASSET_ID,
$b/RACK_PO_NUMBER,
$b/VENDOR_NAME,
$b/MANUFACTURING_SITE,
$b/COMPONENT_CATEGORY,
$b/COMPONENT_DESCRIPTION,
$b/APN,
$b/COMP_VOL
)
/normalize-space(),
',')
),
codepoints-to-string(10))"/>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
到目前为止你尝试了什么?
-
我已经尝试过 XSLT 但它不起作用。
-
请发布尝试的 XSLT 并描述您面临的问题。
-
您确定要仅引用
COMPONENT_DESCRIPTION字段吗?对于有效的 CSV,您应该引用任何可能包含逗号、引号或换行符的文本字段,并转义字段内引号。 -
你是对的,所有字段都需要引号。