Моя конкретная потребность состоит в том, чтобы искать высоту строки с учетом определенного размера шрифта, но я пытаюсь изучить общую технику создания поиска/конкретного сопоставления.
Я думаю, что можно встроить XML в сам документ XSLT (чтобы он мог работать автономно) и создать на нем ключ, используя функцию document('') для ссылки на текущий XSLT, примерно так:
<xsl:variable name="data.font-metrics.line-height">
<line-height font-size="11">12</line-height>
<line-height font-size="12">14</line-height>
<line-height font-size="13">15</line-height>
<line-height font-size="14">16</line-height>
<line-height font-size="15">17</line-height>
<line-height font-size="16">18</line-height>
<line-height font-size="17">20</line-height>
<line-height font-size="18">21</line-height>
</xsl:variable>
<xsl:key name="lookup.font-metrics.line-height" match="document('')//xsl:variable[@name='data.font-metrics.line-height'])/line-height" use="@font-size"/>
После этого я смогу найти высоту строки с помощью ключевой функции:
<xsl:value-of select="key('lookup.font-metrics.line-height',$font-size)"/>
... однако я получаю следующее сообщение об ошибке:
XPath error : Invalid expression
//document('')//xsl:variable[@name='data.font-metrics.line-height'])/line-height/text()
^
Я думаю, что здесь сходятся несколько проблем:
- использование функции документа
- использование ключевой функции
- каков наилучший метод встраивания XML? в переменной?
Также может быть совершенно другое решение проблемы.
Буду очень признателен за вашу помощь!