在 .CSV 文件中为 XML 解析创建 XSL
Posted
技术标签:
【中文标题】在 .CSV 文件中为 XML 解析创建 XSL【英文标题】:XSL Creation for XML Parsing in .CSV File 【发布时间】:2020-04-13 10:56:36 【问题描述】:下面提到的使用 XSL 解析的 .CSV 文件中的 XML 文件的预期结果
示例 XML 文件
<SCHOLARSHIP>
<SCHOLARSHIP_DTL>
<SCHOLARSHIP_NAME>Sports SCHOLARSHIP</SCHOLARSHIP_NAME>
<ISSUE_DATE>21/12/2019</ISSUE_DATE>
<AMOUNT>40000</AMOUNT>
<STUDENTS>
<STUDENT>
<STUDENT_NAME>Alex</STUDENT_NAME>
<SCHOOL_NAME>Monten</SCHOOL_NAME>
</STUDENT>
<STUDENT>
<STUDENT_NAME>Lena</STUDENT_NAME>
<SCHOOL_NAME>Convent</SCHOOL_NAME>
</STUDENT>
</STUDENTS>
</SCHOLARSHIP_DTL>
</SCHOLARSHIP>
使用 Xsl 解析和上述示例数据在 .csv 中的预期输出
SCHOLARSHIP_NAME,ISSUE_DATE,AMOUNT,STUDENT_NAME,SCHOOL_NAME
Sports SCHOLARSHIP,21/12/2019,40000,Alex,Monten
Sports SCHOLARSHIP,21/12/2019,40000,Lena,Convent
下面提到 xsl 没有得到多个学生
<xsl:template match="/">
SCHOLARSHIP_NAME,ISSUE_DATE,AMOUNT,STUDENT_NAME,SCHOOL_NAME
<xsl:for-each select="SCHOLARSHIP/SCHOLARSHIP_DTL">
<xsl:value-of select="concat(SCHOLARSHIP_NAME,',',ISSUE_DATE,',',AMOUNT,',',STUDENTS/STUDENT/STUDENT_NAME,',',STUDENTS/STUDENT/SCHOOL_NAME,'
')"/>
【问题讨论】:
【参考方案1】:不处理带引号的字符串的简单方法是以下 XSLT-1.0 样式表:
<xsl:template match="/">
SCHOLARSHIP_NAME,ISSUE_DATE,AMOUNT,STUDENT_NAME,SCHOOL_NAME
<xsl:for-each select="SCHOLARSHIP/SCHOLARSHIP_DTL">
<xsl:for-each select="STUDENTS/STUDENT">
<xsl:value-of select="concat(../../SCHOLARSHIP_NAME,',',../../ISSUE_DATE,',',../../AMOUNT,',',STUDENT_NAME,',',SCHOOL_NAME,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
它的输出是:
SCHOLARSHIP_NAME,ISSUE_DATE,AMOUNT,STUDENT_NAME,SCHOOL_NAME
Sports SCHOLARSHIP,21/12/2019,40000,Alex,Monten
Sports SCHOLARSHIP,21/12/2019,40000,Lena,Convent
指定为***元素(xsl:stylesheet
的子元素)的首选输出方法应该是“文本”,如下所示:
<xsl:output method="text" />
【讨论】:
太好了……谢谢。以上是关于在 .CSV 文件中为 XML 解析创建 XSL的主要内容,如果未能解决你的问题,请参考以下文章
XML 和 XSL 中的前缀命名空间处理由 XML 解析器返回错误