2009-09-03 53 views
2

在我的Web應用程序中,我使用XSLT顯示搜索結果。 XSLT文件中有一些硬編碼文本,我想讓它們獨立於語言。使XSLT語言獨立

XSLT:

<xsl:if test="$IsEmpty"> 
    <table cellpadding="5" cellspacing="0" border="1" style="width:100%;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid;border-top-color:gray;border-bottom-color:gray;border-left-color:gray;border-right-color:gray;border-top-width:1px;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;"> 
     <tr> 
      <td style="text-align:center;"> 
       There are no blog posts to display. 
      </td> 
     </tr> 
    </table> 
</xsl:if> 

是否有可能挑選從資源文件中的文本"There are no blog posts to display."

回答

6

我假設「資源文件」是指編譯到程序集中的常規resx。在這種情況下,不是直接來自xslt;但是,您可以添加一個擴展對象,並使用一個密鑰基礎的做法,即

<xsl:value-of select="resx:getString('noposts')"/> 

的「RESX」的別名將被映射(xmlns)爲您創建在C#中的XSLT包裝時使用的URI。例如,與xmlns(在XSLT序言):

xmlns:resx="myextnuri" 

我們可以通過映射,在C#:

public class MyXsltExtension { 
    public string getString(string key) { 
     return "TODO: Read from resx: " + key; 
    } 
} 

,重視這個命名空間:

XslCompiledTransform xslt = new XslCompiledTransform(); 
xslt.Load("xslt.xslt"); 
XsltArgumentList args = new XsltArgumentList(); 
object obj = new MyXsltExtension(); 
args.AddExtensionObject("myextnuri", obj); 
using (XmlWriter writer = XmlWriter.Create("out.xml")) { 
    xslt.Transform("xml.xml", args, writer); 
} 

我們現在可以完全控制將託管代碼(作爲擴展)注入到xslt中。

+0

很大的幫助。有效! 謝謝! – Vijay 2009-09-03 08:30:59

+0

'msxsl:script'是另一種選擇。 – 2009-09-05 11:09:42

+0

我看不到'msxsl:script'如何提供對resx的訪問;我很想看到一個例子... – 2009-09-07 19:56:47

2

您可以從外部文件中使用document()功能加載資源:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="@* | node()"> 
     <html> 
     <head> 
      <title>Test</title> 
     </head> 
     <body> 
      <p> 
      <xsl:value-of select="document('resources.xml')/items/item[@id = 'no_posts']"/> 
      </p> 
     </body> 
     </html> 
    </xsl:template> 

XML資源文件:

<?xml version="1.0" encoding="utf-8"?> 
<items> 
    <item id="no_posts">There are no blog posts to display.</item> 
</items> 
</xsl:stylesheet>