在 .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,'&#xA;')"/>

【问题讨论】:

【参考方案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,'&#xA;')"/>
        </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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSL 将 XML 转换为 CSV

XML 和 XSL 中的前缀命名空间处理由 XML 解析器返回错误

如何使用 csv 文件在 XSL 中构建键值对映射?

如何使用 XSL 将 liquibase XML 转换为 CSV

XSLT 1.0:CSV 到 XML - 如何分而治之

Java+XSL合并多个XML文件