在XSLT中的值周围加上双引号

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)

但是当转型运行时,我什么都没得到.它看起来和以前一样.我尝试过的其他事情是:

  • 将双引号放在模板中作为文字.完全搞砸了.
  • 使用"而不是".没有效果,无论如何我输出的文字不是html.
  • 使用和选择变量.

有什么建议?

Tim*_*m C 6

在回复您的评论时,我认为问题在于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"周围看到一组引号.

这里需要三个引号,因为最外面的是文本分隔符,然后一对连续引号在实际字段中被视为单引号.