XSLT 2.0将CSV转换为XML格式
发布时间:2020-12-15 23:55:01 所属栏目:百科 来源:网络整理
导读:我正在尝试将CS??V(逗号分隔文件)转换为 XML.为此,我正在编写一个XSLT模板,这是我在XSLT上的第一次尝试…… CSV样本: ClaimRef,HandlerRef,ClaimType,Date,Area,SettleDate,ClaimStatus,ClaimantName1,1/1,Liability,08-12-2013,US,23-05-2014,Closed,Mark2
我正在尝试将CS??V(逗号分隔文件)转换为
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代码以根据示例CSV数据生成上述XML.
这是一个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="rn?|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="rn?|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的其他在线测试工具中进行测试. Example on xsltransform.net (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |