3

xml サイトマップの有効な xml ファイルを出力する必要がある XSLT テンプレートを作成しています。

<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

&apos;Google サイトマップの ' をエスケープする必要があります。残念ながら、私が試みたすべての試みは、文字列 ' &apos;' を ''' であるかのように扱います。これは無効です - イライラします。XSLT は私をときどき怒らせることがあります。

テクニックのアイデアはありますか?(XSLT 1.0 のテンプレートと関数について自分なりの方法を見つけられると仮定します)

4

4 に答える 4

9

入力にはありますが、出力に'は文字列が必要ですか?&nbsp;

XSL ファイルで、この検索/置換の実装を使用し&apos;てに置き換えます(XSLT 2.0 を使用している場合を除く)。&amp;apos;

<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>

次のように呼び出します。

<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 によって次のように解釈され'ます。&amp;apos;と解釈され&apos;ます。

于 2009-07-09T11:38:45.037 に答える
1

URL から不要な文字を削除する簡単な方法は、umbraco が NiceUrl を生成するときに使用するルールを変更することです。

config/umbracoSettings.config を編集します。

次のように、NiceUrls からすべてのアポストロフィを削除するルールを追加します。

<urlReplacing>
    ...
    <char org="'"></char>     <!-- replace ' with nothing -->
    ...
</urlReplacing>

注: 「org」属性の内容は、要素の内容に置き換えられます。別の例を次に示します。

<char org="+">plus</char> <!-- replace + with the word plus -->
于 2009-07-09T22:22:37.673 に答える
0

xsl:value-of 要素に対してdisable-output-escapingを yes に設定しようとしましたか:

<xsl:value-of disable-output-escaping="yes" select="umbraco.library:NiceUrl($node/@id)"/>

実際には、これはおそらくあなたが望むものとは逆です。

xsl:value-of を xsl:text 要素でラップするのはどうですか?

<xsl:text><xsl:value-of select="umbraco.library:NiceUrl($node/@id)"/></xsl:text>

おそらく、あなたはに翻訳しようとする必要があり'ます&amp;apos;

于 2009-07-09T11:11:57.010 に答える
0

これは機能します。以下に示すように 2 つのパラメーターを変更するだけです。

<xsl:with-param name="replace">&apos;</xsl:with-param>
<xsl:with-param name="by" >AnyString</xsl:with-param>
于 2012-04-12T09:53:21.773 に答える