2009-09-03 9 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;しかし、あなたは、拡張オブジェクトを追加し、キー・ベースのアプローチを使用することができ、すなわち「RESX」エイリアスがマッピングされます

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

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

+0

'msxsl:script'はもう一つの選択肢です。 –

+0

'msxsl:script'がresxへのアクセスを提供する方法がわかりません。私は例を見てみたいです... –

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> 
関連する問題