2014-02-20 3 views
-2

У меня есть файл xsl с переменными и параметрами. Параметры определяются в другом файле XML:Определение и использование переменных в XSL

<fo:block><xsl:value-of select="root/period"/></fo:block> 

и параметр имеет значение:

<root> 
    <period>1-5</period> 
</root> 

Теперь, иногда я хочу, чтобы отобразить блок, содержащий период, иногда я не знаю. Как я могу это достичь? Вот как я попробовал:

<xsl:variable name="cond" select="root/cond"/> 
<xsl:if test="$cond='1'"> 
    <fo:block><xsl:value-of select="root/period"/></fo:block> 
</xsl:if> 

параметры:

<root> 
    <cond>1</cond> 
    <period>1-5</period> 
</root> 

Это не работает! Я отобразил значение переменной, используя <xsl:copy-of select="$cond" />, и он пуст.

UPDATE:

теперь я знаю, в чем проблема:

XSL-FO:

<fo:flow flow-name="xsl-region-body"> 
    <fo:block> 
    test 
    </fo:block> 
    <fo:block> 
    <xsl:variable name="cond" select=root/cond/> 
    <xsl:copy-of select="$cond" /> 
    </fo:block> 
    <fo:block> 
    <xsl:value-of select="root/period"/> 
    </fo:block> 
</fo:flow> 

параметры:

<root> 
    <cond>haha</cond> 
    <period>01.01.2013 – 31.12.2013</period> 
</root> 

выход:

тест 01.01.2013 - 31.12.2013

Так что вопрос действительно: как я могу выбрать значение из параметров XML и присвоить значение переменной XSL?

+1

Показать больше вашей (если не всей) таблицы стилей XSLT. В противном случае все ставки выходят за пределы, где вы поступили не так. –

+0

«Вывод», который вы показали в конце вопроса, кажется окончательным результатом после запуска процессора FO. Вы можете получить представление о проблеме, просмотрев и показывая нам разметку FO, созданную вашей таблицей стилей XSLT, прежде чем эта обработка будет обработана. – LarsH

ответ

-2

И вот решение:

<xsl:variable name="firstLine"> 
    <xsl:value-of select="root/firstLine"/> 
</xsl:variable> 

That't как получить значение из параметров (XML).

+0

Вы принимаете входной XML для параметра, который я думаю. Кроме того, я не вижу, как это относится к вашему вопросу, поскольку «firstLIne» нигде не найдено. –

+0

Можете ли вы объяснить, как этот ответ затрагивает проблему афера? Чем он отличается от того, что он уже пробовал? – LarsH

+1

@ LarsH на самом деле, это _is_ сам автор. –

1

Пара вещей.

Прежде всего, обновленный XSL-FO вы показали не очень хорошо образован:

<xsl:variable name="cond" select=root/cond/> 

Выбор: значение атрибута необходимо кавычки вокруг него:

<xsl:variable name="cond" select="root/cond" /> 

Я предполагаю, что это на самом деле не проблема, потому что, если бы это было так, вы бы не получали никакого вывода, просто ошибку.

Но я думаю, что ваша реальная проблема в том, где вы говорите

<xsl:copy-of select="$cond" /> 

Поскольку вы используете копию-в вместо повышенно-из, это копирует узлы в переменной $ конд к выходу. Таким образом, ваш выход FO будет включать элемент <cond>haha</cond>. Я не знаю, что должен делать процессор FO с такими элементами, которые не имеют пространства имен.По-видимому, вывод текстового контента не является тем, что он делает; вероятно, игнорирует их.

Попробуйте изменить, что копирование не к стоимости из:

<xsl:value-of select="$cond" /> 

Это поставит haha на выход, без <cond> элемента вокруг него. Попробуйте это, и если он не делает то, что вы ожидаете, скажите нам

  1. , что FO вывод, который вы получили (выход таблицы стилей до процессора FO работает)
  2. и что конечный результат вы получили (выход процессора FO)
  3. и как они отличаются от ожидаемого.
+1

+1 для конструктивного ответа на вопрос, который является беспорядком. –

+0

Любая причина для downvote? – LarsH

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