Xml XSLT-将输出中的撇号替换为转义文本
我正在编写一个XSLT模板,它需要为xml站点地图输出一个有效的xml文件Xml XSLT-将输出中的撇号替换为转义文本,xml,xslt,sitemap,Xml,Xslt,Sitemap,我正在编写一个XSLT模板,它需要为xml站点地图输出一个有效的xml文件 <url> <loc> <xsl:value-of select="umbraco.library:NiceUrl($node/@id)"/> </loc> <lastmod> <xsl:value-of select="concat($node/@updateDate,'+00:00')"/> </lastmod> &l
<url>
<loc>
<xsl:value-of select="umbraco.library:NiceUrl($node/@id)"/>
</loc>
<lastmod>
<xsl:value-of select="concat($node/@updateDate,'+00:00')"/>
</lastmod>
</url>
不幸的是,输出的Url包含撇号-/what's-new.aspx
我需要避开“to”谷歌网站地图的代码>。不幸的是,我每次尝试都会处理字符串“”&apos代码>'好像它是'',这是无效的-令人沮丧。XSLT有时会让我发疯
有什么技巧的想法吗?(假设我可以找到XSLT 1.0模板和函数)是否尝试将元素的xsl:value设置为yes:
<xsl:value-of disable-output-escaping="yes" select="umbraco.library:NiceUrl($node/@id)"/>
事实上,这可能与你想要的正好相反
将的xsl:value包装到xsl:text元素中如何
<xsl:text><xsl:value-of select="umbraco.library:NiceUrl($node/@id)"/></xsl:text>
也许你应该试着把“
翻译成&;载脂蛋白代码>那么您的输入中有'
,但您的输出中需要字符串
在XSL文件中,替换&apos代码>带有&;载脂蛋白代码>,使用(除非您使用的是XSLT 2.0):
可以这样说:
<loc>
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="umbraco.library:NiceUrl($node/@id)"/>
<xsl:with-param name="replace" select="'"/>
<xsl:with-param name="by" select="&apos;"/>
</xsl:call-template>
</loc>
问题是&apos代码>被XSL解释为”
<代码>&;载脂蛋白代码>将被解释为&apos
从URL中删除不需要的字符的简单方法是更改umbraco在生成URL时使用的规则
编辑配置/umbracoSettings.config
添加一条规则以删除URL中的所有撇号,如下所示:
<urlReplacing>
...
<char org="'"></char> <!-- replace ' with nothing -->
...
</urlReplacing>
...
...
注意:“org”属性的内容将替换为元素的内容,下面是另一个示例:
<char org="+">plus</char> <!-- replace + with the word plus -->
plus
这将起作用,您只需更改两个参数,如下所示
<xsl:with-param name="replace">'</xsl:with-param>
<xsl:with-param name="by" >AnyString</xsl:with-param>
&apos;
任意字符串
谢谢,我尝试了这一点,还结合声明了一个名为$apos的变量,其值为',然后尝试使用替换函数将$apos替换为'&apos;'-不幸的是,XSLT解释了“&apos;”作为“”,这是一个未关闭的报价再次-grrr谢谢提示。我在一个本地的开发盒上尝试了一下,发现了一个小的副作用。替换仅适用于配置更改后发布的节点。任何带有这些字符的现有节点都需要重新发布-这是一个包含大量链接的大型复杂站点-必须添加大量URL重写规则:(您可以“重新发布整个站点”(右键单击树视图中的根节点),当然,任何书签URL都是错误的,但内部链接应该更新。您可能需要执行以下操作:“硬重新发布”如果不起作用select=“&;apos;”
请给我一个语法错误:表达式中出现意外的标记“&”。->&I获取错误:字符串文字未关闭。-->”
<xsl:with-param name="replace">'</xsl:with-param>
<xsl:with-param name="by" >AnyString</xsl:with-param>