我有以下csv
DATO;JOBSID;JOBNR;TEKST;AFSENDER;MODTAGER
02-06-2017;1234;4321;"MEI KONG ML KL. 00.45-13.00 TLF. NR 1023 0188
SØNDAG ML KL 24.00-11.00 TLF. NR. 6935 0188
Prags Boulevard 49D. Tlf. 3134 5998
Bogpakker: Tlf. 1245 0880
TILLIDSREPRÆSENTANT GRETE WISE: TLF. 21200919";"DI";"ALLE"最初,我使用换行符进行行标记化。但是我的数据也包含换行符,我需要维护这些换行符。我尝试用一个特殊字符替换换行符,然后用换行符替换它。但在这种情况下,我无法进行标记化。
我的XSLT如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="foo/bar"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output encoding="iso-8859-1" method="xml" indent="yes"/>
<xsl:include href="job-lib.xsl"/><!-- string normalization and other general functions in this library -->
<!-- Parameters -->
<xsl:param name="csv-file"/><!-- the input csv file -->
<xsl:param name="text-encoding" as="xs:string" select="'iso-8859-1'"/>
<xsl:param name="root-element"/><!-- root element name in output file -->
<!-- The direct input to the transformation is an "empty" xml file with (empty) root element "null" -->
<xsl:template match="null">
<xsl:variable name="output-file" select="concat(substring-before($csv-file,'.csv'),'.xml')"/>
<xsl:element name="{$root-element}">
<xsl:variable name="csv-content">
<xsl:for-each select="tokenize(unparsed-text($csv-file,$text-encoding),'
')">
<xsl:element name="row">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="column-names" select="tokenize(string($csv-content/row[1]),';')"/>
<xsl:for-each select="$csv-content/row[position() > 1]">
<xsl:copy>
<xsl:for-each select="tokenize(string(.),';')">
<xsl:variable name="column-pos" select="position()"/>
<xsl:variable name="element-name" select="$column-names[$column-pos]"/>
<xsl:element name="{$element-name}">
<xsl:value-of select="f:normalize(.)"/>
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>所需的XML为
<job>
<row>
<DATO>02-06-2017</DATO>
<JOBSID>1234</JOBSID>
<JOBNR>4321</JOBNR>
<TEKST>
"MEI KONG ML KL. 00.45-13.00 TLF. NR 1023 0188
MEI KONG ML KL 24.00-11.00 TLF. NR. 6935 0188
Prags Boulevard 49D. Tlf. 3134 5998
Bogpakker: Tlf. 1245 0880
TILLIDSREPRÆSENTANT GRETE WISE: TLF. 21200919
</TEKST>
<AFSENDER>DI</AFSENDER>
<MODTAGER>ALLE</MODTAGER>
</row>
</job>请帮助我,如何才能将我的CSV转换为所需的XML格式,其中包含换行符以及。
我使用calabash进行转换。
发布于 2017-06-09 00:47:54
我不清楚你的样本数据是否具有代表性。如果您的实际数据与您的样本数据完全一致,那么可能有一个简单的解决办法--您的MODTAGER字符串是每条记录中的最后一个数据字段,该字符串以"\n结尾。同时,您的TEKST字符串(唯一包含换行符的数据字段)的换行符前面永远不会有双引号--因此"\n永远不会与TEKST字符串中的任何内容相匹配。因此,您可以在"\n上安全地对文件进行标记化,以按每个单独的记录拆分文件。
https://stackoverflow.com/questions/44431055
复制相似问题