2013-08-27 13 views
0

У меня есть следующие XML и XSLT для преобразования в HTML.Как получить значение из JavaScript в XSLT?

XML

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <te>t1</te> 
</root> 

XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" indent="yes" /> 
    <xsl:template match="root"> 
     <html> 
     <div> 
      <xsl:variable name="name1" select="te" /> 
      ** 
      <xsl:value-of select="CtrlList['$name1']" /> 
      ** 
     </div> 
     <script language="javascript">var List={ 
     "t1":"test" 
    }</script> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

Так что моя цель, это получить значение "тэ" из XML и отобразить его с JavaScript объект "Список" и возвращение тест значения при преобразовании с помощью XSLT. Поэтому я должен получить значение test как output.

Может ли кто-нибудь выяснить, что плохого в XSLT.

+0

В вашем «значении» отсутствует вторая квадратная скобка. Это должно быть ''. –

+0

Извините, имеет опечатку. Но все же я сталкиваюсь с одной и той же проблемой. –

+0

AFAIK Xslt не может прослушивать объект JSON изначально. См. Здесь некоторые идеи: http://stackoverflow.com/questions/12188064/extracting-information-from-a-json-file-using-xslt-version-1-0 – StuartLC

ответ

0

Когда вы смотрите на свой XSLT, может показаться, что там есть JavaScript, но все XSLT видит, что он выводит элемент с именем «script» с атрибутом «language», который содержит некоторый текст. Также стоит отметить, что xsl: значение используется для получения значения из входного документа, но ваш скрипт фактически является частью дерева результатов и поэтому недоступен для xsl: значение ,

Однако возможно расширить XSLT, чтобы он мог использовать функции javascript, но это очень зависит от процессора, и вы должны думать об этом так же, как встраивание JavaScript в HTML. Посмотрите на этот вопрос, в качестве примера

How to include javaScript file in xslt

Таким образом, в вашем случае, ваш XSLT будет что-то вроде этого (примечание этот пример будет работать только в Mircorsofts процессор MSXML)

<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
     xmlns:user="http://mycompany.com/mynamespace" 
     exclude-result-prefixes="msxsl user"> 

    <xsl:output method="xml" indent="yes" /> 

<msxsl:script language="JScript" implements-prefix="user"> 
    var List={ 
    "t1":"test" 
    } 

    function lookup(key) { 
    return List[key]; 
    } 
</msxsl:script> 

<xsl:template match="root"> 
    <html> 
    <div> 
     <xsl:variable name="name1" select="te"/> 
     <xsl:value-of select="user:lookup(string($name1))"/> 
    </div> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

Конечно, возможно, стоит спросить, почему вы хотите использовать javascript в своем XSLT. Возможно, можно добиться такого же результата, используя чисто XSLT, что, несомненно, сделает вас XSLT более портативным.

Смежные вопросы