我的XML是从Web表单生成的,一些用户正在插入换行符和字符,这些换行符和字符被转换为换行符n
和断开的实体,如&
我正在使用一些变量来转换和删除坏字符,但我不知道如何去除这些类型的字符。
这是我用来转换或去除其他坏字符的方法。如果您需要查看整个 XSL,请告诉我。。
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz_aaea'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ äãêÂ.,'" />
<xsl:variable name="linebreaks" select="'n'" />
<xsl:variable name="nolinebreaks" select="' '" />
。
<xsl:value-of select="translate(Surname, $uppercase, $smallcase)"/>
<xsl:value-of select="translate(normalize-space(Office_photos), $linebreaks, $nolinebreaks)"/>
XML 中的文本包含如下内容:
<Office_photos>bn_1.jpg: Showing a little Red Sox Pride! nLeft to right:
Tessa Michelle Summers, nJulie Gross, Alexis Drzewiecki</Office_photos>
我正在尝试摆脱数据中的n
字符
Lingamurthy CS在注释中解释的那样n
在XML中不被视为单个字符。它只是简单地解析为两个字符,无需任何特殊处理。
如果这是你想要改变的字面意思,那么在 XSLT 1.0 中,你将需要使用递归模板来替换文本(XSLT 2.0 有一个替换函数,XSLT 1.0 没有)。
在 Stackoverflow 上快速搜索在 XSLT 字符串替换中找到一个这样的模板
叫这个,而不是做这个....
<xsl:value-of select="translate(normalize-space(Office_photos), $linebreaks, $nolinebreaks)"/>
你会这样做
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="Office_photos" />
<xsl:with-param name="replace" select="$linebreaks" />
<xsl:with-param name="by" select="$nolinebreaks" />
</xsl:call-template>
试试这个 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:variable name="linebreaks" select="'n'" />
<xsl:variable name="nolinebreaks" select="' '" />
<xsl:template match="/">
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="Office_photos" />
<xsl:with-param name="replace" select="$linebreaks" />
<xsl:with-param name="by" select="$nolinebreaks" />
</xsl:call-template>
</xsl:template>
<xsl:template name="string-replace-all">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
(感谢创建替换模板的马克·艾略特)