Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT-将输出中的撇号替换为转义文本_Xml_Xslt_Sitemap - Fatal编程技术网

Xml XSLT-将输出中的撇号替换为转义文本

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

我正在编写一个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>
</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="&apos;"/>
    <xsl:with-param name="by" select="&amp;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">&apos;</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">&apos;</xsl:with-param>
<xsl:with-param name="by" >AnyString</xsl:with-param>