Относится к вопросу здесь .
У меня есть ввод XML в форме:
<book>
<chapter>
...
</chapter>
</book>
В настоящее время я вывожу что-то вроде:
<div class="book" id="book-3">
<div class="chapter>
...
</div>
</div>
Использование правила <div class="book" id="book-{position()}">
для создания идентификатора книги. Так что значение идентификатора увеличивается на каждом <book>
узле.
Я бы хотел получить вывод вида:
<div class="book" id="book-3">
<div class="chapter" id="book-3-chapter-7">
...
</div>
</div>
Я пытался использовать правило, которое извлекало атрибут id из родительского элемента и выводило его в дочернем элементе. Только когда я задавал этот вопрос, я понял, что, конечно, никогда не будет совпадения для "../@id"
, поскольку атрибут не существует в исходном XML, только в выводе.
Попытка получить родительский атрибут для использования в качестве части идентификатора, вероятно, не является "способом XSLT". Поэтому, даже если есть способ получить доступ к выходу, это, вероятно, неправильный способ сделать это.
Как только теги главы созданы с их идентификатором, появляются дочерние элементы элементов главы, которые я хотел бы придерживаться того же соглашения (поэтому они будут иметь <div id="book-2-chapter12-verse212">
). Идентификатор будет использоваться отдельным приложением Java для связи с документом, поэтому важно, чтобы он следовал соглашению (т.е. сгенерированные идентификаторы не будут работать).
Как лучше всего создать этот вложенный инкрементный счетчик с использованием XSLT?
P.S. Название вопроса, вероятно, далеко от того, что я действительно хочу спросить, но я недостаточно знаю XSLT, чтобы задать правильный вопрос. Пожалуйста, не стесняйтесь редактировать или предлагать лучший заголовок.
РЕДАКТИРОВАТЬ: Хотя на первоначальный вопрос были хорошие ответы, как я уже сказал, я не был уверен, как правильно задать вопрос. Получив ответ на вопрос, который я должен был задать, я изменил вопрос.
Это означает, что есть ответы, которые касаются моего (неправильно поставленного) исходного вопроса, и ответ, который понимает намерение, которое мне было трудно выразить. Я принял последнее.
Я надеюсь, что другие ответившие найдут это приемлемым, и если есть какие-либо предложения о том, как задать неправильный вопрос, в первую очередь , я буду рад их услышать.