Mar*_*lef 4 xslt double-quotes
我有一个XSLT模板,它将地址数据输出为CSV.我想用双引号包装一些值,因为它们包含逗号作为地址数据的一部分.
我的问题是在转换后,双引号丢失了.我可以让处理器插入几乎任何东西,但不能插入我想要的双引号.
以下是一些示例代码:
<xsl:value-of select="./*/*/LotNumber"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="./*/*/StreetName"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="./*/*/StreetType"/>
Run Code Online (Sandbox Code Playgroud)
我之前已将$ delim定义为:
<xsl:param name="delim" select="','" />
Run Code Online (Sandbox Code Playgroud)
所以这个模板将输出例如:
10,SMITH,ST
Run Code Online (Sandbox Code Playgroud)
让我们说为了论证我想用双引号包装街道名称,以便它出现为:
10,"SMITH",ST
Run Code Online (Sandbox Code Playgroud)
我尝试过各种各样的东西,但它们都是以宣称双引号为主题的变体:
<xsl:param name="quote">"</xsl:param>
Run Code Online (Sandbox Code Playgroud)
然后将我的值包装为:
<xsl:value-of select="$quote"/>
<xsl:value-of select="./*/*/StreetName"/>
<xsl:value-of select="$quote"/>
Run Code Online (Sandbox Code Playgroud)
但是当转型运行时,我什么都没得到.它看起来和以前一样.我尝试过的其他事情是:
有什么建议?
在回复您的评论时,我认为问题在于Microsoft Excel,而不是XSLT.引号被视为文本分隔符,通常只有在有逗号的字段时才使用它们,表示它只是一个字段,而不是两个字段.在任何情况下,当您将CSV文件读入Microsoft Excel时,它不会显示任何文本分隔符(无论该字段是否包含逗号),只显示其中的文本.引号不会被视为字段中文本的一部分,而只是用于分隔字段中可能包含特殊字符的文本.
此外,当您将文件另存为CSV文件时,Excel将仅在需要时使用文本分隔符(即,当字段包含逗号时).如果CSV文件在不包含逗号的字段周围有引号(如您的示例中所示)10,"SMITH",ST,则在保存时会删除这些引号.
为了证明这一点,尝试将文件重命名为.txt文件,然后在浏览器中提供(因此它应该在IE中打开,或者可能是记事本),并查看数据是否符合预期.
如果打算将引号作为实际字段文本的一部分,而不是作为分隔符处理,则需要在数据周围输出三个引号
<xsl:param name="delim" select="','" />
<xsl:param name="quote">"</xsl:param>
<xsl:value-of select="./*/*/LotNumber"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="./*/*/StreetName"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="./*/*/StreetType"/>
Run Code Online (Sandbox Code Playgroud)
因此,作为文本,它将输出如下
10,"""SMITH""",ST
Run Code Online (Sandbox Code Playgroud)
在Excel中打开时,您应该在"Smith"周围看到一组引号.
这里需要三个引号,因为最外面的是文本分隔符,然后一对连续引号在实际字段中被视为单引号.