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.

Другие вопросы по тегам