2009-09-03 2 views
2

В моем веб-приложении я показываю результаты поиска с помощью 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) к URI, который вы используете при создании XSLT оболочки в C#. Например, с 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> 
Смежные вопросы