Перезаписать переменную в xsl
Мне просто нужно переписать переменную в xsl
Example:
x=0
if x=0
then
x=3
Мне нужно изменить значение переменной.
Я очень плохо знаком с xsl, пожалуйста, помогите мне, как этого добиться. Это может быть глупо, но я понятия не имею..
3 ответа
<xsl:variable>
в xslt
не является актуальной переменной. Это означает, что его нельзя изменить после того, как вы его определили, и вы можете использовать его следующим образом:
скажем, у нас есть этот XML с именем test.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<client-list>
<client>
<name>person1</name>
</client>
<client>
<name>person2</name>
</client>
<client>
<name>person3</name>
</client>
</client-list>
и мы хотим преобразовать его в csv-подобный (значения, разделенные запятыми), но заменив person1
со скрытым человеком с именем person4
, Тогда скажем, у нас есть этот XML с именем test.xsl
который будет использоваться для преобразования test.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="hiddenname">person4</xsl:variable>
<!-- this template is for the root tag client-list of the test.xml -->
<xsl:template match="/client-list">
<!-- for each tag with name client you find, ... -->
<xsl:for-each select="client">
<!-- if the tag with name -name- don't have the value person1 just place its data, ... -->
<xsl:if test="name != 'person1'">
<xsl:value-of select="name"/>
</xsl:if>
<!-- if have the value person1 place the data from the hiddenperson -->
<xsl:if test="name = 'person1'">
<xsl:value-of select="$hiddenname"/>
</xsl:if>
<!-- and place a comma -->
<xsl:text>,</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
результаты будут
person4,person2,person3,
Я надеюсь, что это поможет вам.
Мне просто нужно переписать переменную в xsl
Пример x=0, если x=0, тогда x = 3
XSLT - это функциональный язык, и среди прочего это означает, что однажды определенная переменная не может быть изменена.
Конечно, этот факт не означает, что данная проблема не может быть решена с помощью XSLT - только то, что решение не содержит каких-либо модификаций значений переменных, однажды определенных.
Скажите нам, в чем заключается ваша конкретная проблема, и многие люди смогут предоставить решение XSLT:)
Как отмечалось в других комментариях, переменные в XSLT не могут быть изменены после их установки. Самый простой способ, который я нашел, - это вкладывать переменные друг в друга.
<xsl:variable name="initial_condition" select="VALUE"/>
Потом
<xsl:variable name="modified_condition" select="$initial_condition + MODIFIER"/>
Некоторые из наших xsl имеют целый ряд вложенных вычислений, которые действительно должны быть в бизнес-логике, которая генерирует исходный XML. Из-за периода времени, когда не было разработчика / времени для добавления этой бизнес-логики, она была добавлена как часть уровня представления.
Поддерживать подобный код становится чрезвычайно сложно, особенно если учесть, что у вас, вероятно, есть соображения относительно потока управления. Имена переменных оказываются очень запутанными, и читаемость падает через пол. Такой код должен быть последним средством, на самом деле это не то, для чего предназначен XSLT.