2013-08-14 8 views
0

Я пытаюсь использовать переменную xsl в блоке javascript в моем файле xslt, и я нахожусь в конце моего ума.Как использовать переменную xsl в блоке javascript

Вот 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="a"> 
     <xsl:variable name="myVar" select="xpath to the node"/> 

    <script type='text/javascript'> 

      googletag.cmd.push(function() { 
     ... 
     googletag.pubads().setTargeting('label', '<xsl:value-of select="$myVar"/>'); 
      googletag.enableServices(); 
      }); 

    </script> 

    </xsl:template> 
</xsl:stylesheet> 

Если я преобразовать XML в кислороде, этот код работает отлично. Но когда я запускаю его через мой сервлет, который использует javax.xml.transform.Transformer.transform(Source xmlSource, Result outputTarget) throws TransformerException, я получаю это: googletag.pubads().setTargeting('label', ' ');

Можно ли предположить возможную причину этого несоответствия между кислородом и мой сервлет?

+0

Является ли ваша проблема, что при запуске через oXygen вывод имеет значение для '$ myVar' и при запуске через сервлет нет значения для значения? Это может быть разница между тем, какие документы отправляются в преобразования. Что такое xpath для узла? Вы уверены, что это соответствует? Уменьшите до более простого теста только XSLT, который выдает значение '$ myVar', чтобы убедиться, что вы правильно сопоставляете, когда запускаете сервлет. –

ответ

1

Попробуйте это вместо того, чтобы, как содержимое переменной:

<xsl:variable name="myVar" select="'xpath to the node'"/> 

Это гарантирует, содержимое рассматривается как текстовая строка. Возможно, Oxygen прощает достаточно, чтобы игнорировать его, а ваша Java (правильно) нет - это ошибка, потому что внутри цитируемой строки вы должны поместить выражение .

Внешние двойные кавычки не принимают участия в формировании выражения, только то, что внутри. Таким образом, вы можете выразить строку '1+2' или сумма1+2 в переменной.

+0

Я все еще не решил эту проблему, но я считаю, что мы можем столкнуться с XSLT. Это то, что нельзя моделировать в Oxygen. Я отправлю сообщение, как только у меня появятся доказательства. Благодарю. – jkeehr

+0

Я почти смущен, чтобы признать, как эта проблема была решена. Причина, по которой XSLT работает в Oxygen, заключается в том, что я кормил его XML нужным узлом. Оказалось, что в производстве XSLT использует другой XML, который не включает нужный мне узел. Простое исправление заключалось в том, чтобы добавить этот узел в XML и альт, тайна была решена. Duh! Благодаря Jongware и Mads Hansen за то, что они помогли мне вернуться на эту ошибку. – jkeehr