Не ясно, в какой момент вы можете вводить «переменные», и как вы ожидаете их делать.Вот пример, который может послужить источником вдохновения.Он использует только простой перевод идентификаторов и пропускает все объекты FO для краткости.
Общий принцип - вставьте скрытый div
с некоторыми кодами, которые являются переменными.Например, ваш входной HTML-код теперь имеет следующее:
<html>
<div class="variables" style="display:none">
<div class="var_1" data-value="variable 1 value"/>
<div class="var_2" data-value="variable 2 value"/>
<div class="var_3" data-value="variable 3 value"/>
</div>
<div>
<div>Var 1 Value: <span class="variable" data-ref="var_1"/></div>
<div>Var 2 Value: <span class="variable" data-ref="var_2"/></div>
<div>Var 3 Value: <span class="variable" data-ref="var_3"/></div>
</div>
</html>
И вы изменяете свой XSL для шаблона, который соответствует span
, в который вы хотите вставить переменную:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="span[@class='variable']">
<xsl:variable name="lookup">
<xsl:value-of select="@data-ref"/>
</xsl:variable>
<span>
<xsl:value-of select="//div[@class=$lookup]/@data-value"/>
</span>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Вывод этого будет:
<html>
<div class="variables" style="display:none">
<div class="var_1" data-value="variable 1 value"></div>
<div class="var_2" data-value="variable 2 value"></div>
<div class="var_3" data-value="variable 3 value"></div>
</div>
<div>
<div>Var 1 Value: <span>variable 1 value</span></div>
<div>Var 2 Value: <span>variable 2 value</span></div>
<div>Var 3 Value: <span>variable 3 value</span></div>
</div>
</html
Конечно, вы можете расширить его, добавив шаблон для удаления div
, чей класс variables
, например, чтобы его не было ввыводится или обрабатывается вашими шаблонами.