在我的Web应用程序中,我使用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>
Run Code Online (Sandbox Code Playgroud)
是否可以"There are no blog posts to display."从资源文件中选择文本?
我假设"资源文件"是指编译到程序集中的常规resx.在这种情况下,不是直接来自xslt; 但是,您可以添加扩展对象并使用基于密钥的方法,即
<xsl:value-of select="resx:getString('noposts')"/>
Run Code Online (Sandbox Code Playgroud)
"resx"别名将被映射(xmlns)到您在C#中创建xslt包装时使用的uri.例如,使用xmlns(在xslt前导码中):
xmlns:resx="myextnuri"
Run Code Online (Sandbox Code Playgroud)
我们可以通过以下方式在C#中映射:
public class MyXsltExtension {
public string getString(string key) {
return "TODO: Read from resx: " + key;
}
}
Run Code Online (Sandbox Code Playgroud)
并将其附加到命名空间:
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);
}
Run Code Online (Sandbox Code Playgroud)
我们现在可以完全控制将托管代码(作为扩展)注入到我们的xslt中.