XSL值检测URL中的字符串

时间:2012-05-08 10:58:11

标签: xml string url xslt

我有一个多语言网站,网址结构如下:www.mysite/en/home.htmwww.mysite/es/home.htm(适用于英语和西班牙语版本)。

在这个home.htm中,我有一个来自xml文件的表数据。 此表的标头<th>位于xsl文件中。

我想根据我在网址中/es/检测到的语言,动态地更改这些值。

  • 如果网址= www.mysite / en / home.htm则
  • 描述
  • 游戏类型
  • ...

  • 如果网址= www.mysite / es / home.htm而不是

  • Descripción
  • Tipo De Juego
  • ....

任何人都可以帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:my="my:my" exclude-result-prefixes="my">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select="'www.mysite/es/home.htm '"/>

 <my:headings>
  <h lang="en">
    <description>Description</description>
    <gameType>Game Type</gameType>
  </h>
  <h lang="es">
    <description>Descripción</description>
    <gameType>Tipo De Juego</gameType>
  </h>
 </my:headings>

 <xsl:variable name="vHeadings" select="document('')/*/my:headings/*"/>

 <xsl:template match="/">

  <xsl:variable name="vLang" select=
    "substring-before(substring-after($pUrl, '/'), '/')"/>

     <table>
       <thead>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/description"/></td>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/gameType"/></td>
       </thead>
     </table>
 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用)时,会生成所需的标题

<table>
   <thead>
      <td>Descripción</td>
      <td>Tipo De Juego</td>
   </thead>
</table>

注意:在实际应用中,您可能希望将特定于语言的数据放在单独的XML文件中(甚至在文件中 - 每种语言一个) - 在这种情况下您只需稍微更改此代码中document()函数的调用。

<强>更新

OP在评论中表示在他的环境中禁止使用document()

以下是相同的解决方案,只需稍加修改即可使用document()

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pUrl" select="'www.mysite/es/home.htm '"/>

 <xsl:variable name="vrtfHeadings">
  <h lang="en">
    <description>Description</description>
    <gameType>Game Type</gameType>
  </h>
  <h lang="es">
    <description>Descripción</description>
    <gameType>Tipo De Juego</gameType>
  </h>
 </xsl:variable>

 <xsl:variable name="vHeadings" select="ext:node-set($vrtfHeadings)/*"/>

 <xsl:template match="/">

  <xsl:variable name="vLang" select=
    "substring-before(substring-after($pUrl, '/'), '/')"/>

     <table>
       <thead>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/description"/></td>
         <td><xsl:value-of select="$vHeadings[@lang=$vLang]/gameType"/></td>
       </thead>
     </table>
 </xsl:template>
</xsl:stylesheet>