XSLT + XPath: использование атрибутов id и id-ref
У меня есть документ xsl-fo, имеющий несколько <page-sequences>
, Каждую секунду <page-sequences>
элемент имеет атрибут id="end"
, Когда я ссылаюсь на эти идентификаторы с ref-id="end"
Как я узнаю, какой элемент получен? Могу ли я сослаться на следующий элемент с таким идентификатором?
Пример (мой вопрос снова можно увидеть в комментарии):
<fo:page-sequence id="end">
...........
</fo:page-sequence>
<fo:page-sequence>
...........
<fo:page-number-citation-last ref-id="end"/>
<!-- unfortunately, the previous element having id="ref" has been thus referenced -->
<!-- how could I reference the next element? -->
...........
</fo:page-sequence>
<fo:page-sequence id="end">
...........
</fo:page-sequence>
1 ответ
Можете ли вы написать это как ответ (на оба моих вопроса), чтобы я мог принять это?
Конечно. Предварительным условием ссылки на конкретный элемент в XSL-FO является то, что у вас есть возможность однозначно идентифицировать его. Лучший способ сделать это - использовать ID
атрибут для элемента, который вы хотите идентифицировать.
Идентификатор должен состоять из любой последовательности буквенно-цифровых символов и _
(то есть его значение должно быть действительным NCName, см. спецификацию здесь).
Вы можете ввести каждый идентификатор вручную, но обычно это делается с xsl:generate-id()
(которая является функцией XSLT, а не XSL-FO). generate-id()
автоматически гарантирует, что идентификаторы уникальны во всем документе.
Обратите внимание, что generate-id()
фактически генерирует идентификатор для текущего совпадения шаблона или для узла, который обрабатывается в итерации xsl:for-each
,
Вы можете поместить идентификатор для каждого элемента в XML, и поэтому ссылка на что-либо по идентификатору возможна для любого элемента в XSL-FO.