我正在将xml转换为csv文件,并且有一个地址字段,其中包含','逗号转换后我的结果不在正确的列下,所以如何替换','在我的xsl文件中包含空格或其他值。
<?xml version="1.0" encoding="UTF-8"?>
<Details>
<EmpDetails>
<Name>AAA</Name>
<Age>51</Age>
<Sex>M</Sex>
<Address>
<AdderessLine1>25, SilverStreet</AdderessLine1>
<AdderessLine2></AdderessLine2>
</Address>
<JobLocation>India</JobLocation>
</EmpDetails>
<EmpDetails>
<Name>BBB</Name>
<Age>62</Age>
<Sex>M</Sex>
<Address>
<AdderessLine1>12, GoldStreet</AdderessLine1>
<AdderessLine2></AdderessLine2>
</Address>
<JobLocation>China</JobLocation>
</EmpDetails>
<Details>
上面的xml只是解释我问题的示例 以下文件是示例xsl文件:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/"> Name, Age, Sex, Address
<xsl:for-each select="//Details">
<xsl:value-of select="concat(Name,',',Age,',',Sex,',',Address,'
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
最简单的选择是始终在地址字段
周围加上引号std::initializer_list
如果您只想在字段中包含逗号的情况下执行此操作,则可以使用模板添加逻辑以检查逗号
试试这个XSLT
<xsl:template match="/">
<xsl:text>Name, Age, Sex, Address
</xsl:text>
<xsl:for-each select="//EmpDetails">
<xsl:value-of select="concat(Name,',',Age,',',Sex,',"',Address/AdderessLine1,'","',JobLocation,'"
')"/>
</xsl:for-each>
</xsl:template>
如果字段中没有逗号,则应用XSLT内置模板,无论如何都只输出元素的文本值。
请注意,您的XML具有元素名称<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
<xsl:text>Name, Age, Sex, Address, JobLocation
</xsl:text>
<xsl:for-each select="//EmpDetails">
<xsl:value-of select="concat(Name,',',Age,',',Sex)"/>
<xsl:text>,</xsl:text>
<xsl:apply-templates select="Address/AdderessLine1" />
<xsl:text>,</xsl:text>
<xsl:apply-templates select="JobLocation" />
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="*[contains(., ',')]">
<xsl:text>"</xsl:text>
<xsl:value-of select="." />
<xsl:text>"</xsl:text>
</xsl:template>
</xsl:stylesheet>
。它可能应该是AdderessLine1