我正在尝试将CSV(逗号分隔文件)转换为
XML.为此,我正在编写一个XSLT模板,这是我在XSLT上的第一次尝试……
CSV样本:
ClaimRef,HandlerRef,ClaimType,Date,Area,SettleDate,Claimstatus,ClaimantName 1,1/1,Liability,08-12-2013,US,23-05-2014,Closed,Mark 2,1/2,08-10-2013,UK,23-02-2014,John
所需的XML输出格式:
<Claims> <Claim> <ClaimRef></ClaimRef> <HandlerRef></HandlerRef> <ClaimType></ClaimType> <Date></Date> <Area></Area> <SettleDate></SettleDate> <Claimstatus></Claimstatus> <ClaimantName></ClaimantName> </Claim> </Claims>
我使用http://blogs.msdn.com/b/kaevans/archive/2003/04/17/5780.aspx作为初始启动,使用http://xslttest.appspot.com/作为测试结果.但是本文提到了如何将值设为< row>< elem>等.
这是一个XSLT 2.0选项……
CSV输入(在csv-uri参数中引用的so.csv.)
ClaimRef,John
XSLT 2.0(使用格式良好的XML XML文档或样式表本身作为输入,或指定csv2xml作为初始模板.)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="csv-encoding" as="xs:string" select="'iso-8859-1'"/> <xsl:param name="csv-uri" as="xs:string" select="'file:///C:/Users/dhaley/Desktop/so.csv'"/> <xsl:template match="/" name="csv2xml"> <Claims> <xsl:choose> <xsl:when test="unparsed-text-available($csv-uri,$csv-encoding)"> <xsl:variable name="csv" select="unparsed-text($csv-uri,$csv-encoding)"/> <!--Get Header--> <xsl:variable name="header-tokens" as="xs:string*"> <xsl:analyze-string select="$csv" regex="\r\n?|\n"> <xsl:non-matching-substring> <xsl:if test="position()=1"> <xsl:copy-of select="tokenize(.,',')"/> </xsl:if> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:variable> <xsl:analyze-string select="$csv" regex="\r\n?|\n"> <xsl:non-matching-substring> <xsl:if test="not(position()=1)"> <Claim> <xsl:for-each select="tokenize(.,')"> <xsl:variable name="pos" select="position()"/> <xsl:element name="{$header-tokens[$pos]}"> <xsl:value-of select="."/> </xsl:element> </xsl:for-each> </Claim> </xsl:if> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:when> <xsl:otherwise> <xsl:variable name="error"> <xsl:text>Error reading "</xsl:text> <xsl:value-of select="$csv-uri"/> <xsl:text>" (encoding "</xsl:text> <xsl:value-of select="$csv-encoding"/> <xsl:text>").</xsl:text> </xsl:variable> <xsl:message><xsl:value-of select="$error"/></xsl:message> <xsl:value-of select="$error"/> </xsl:otherwise> </xsl:choose> </Claims> </xsl:template> </xsl:stylesheet>
XML输出
<Claims> <Claim> <ClaimRef>1</ClaimRef> <HandlerRef>1/1</HandlerRef> <ClaimType>Liability</ClaimType> <Date>08-12-2013</Date> <Area>US</Area> <SettleDate>23-05-2014</SettleDate> <Claimstatus>Closed</Claimstatus> <ClaimantName>Mark</ClaimantName> </Claim> <Claim> <ClaimRef>2</ClaimRef> <HandlerRef>1/2</HandlerRef> <ClaimType>Liability</ClaimType> <Date>08-10-2013</Date> <Area>UK</Area> <SettleDate>23-02-2014</SettleDate> <Claimstatus>Closed</Claimstatus> <ClaimantName>John</ClaimantName> </Claim> </Claims>
每条评论更新……
这是相同的示例,但使用变量而不是外部CSV文件.您可以使用此XSLT在支持XSLT 2.0的其他在线测试工具中进行测试.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。