У меня есть следующий XML:символов до первого дочернего узла и после последнего дочернего узла в XSLT
<line>
<orig><gap quantity="4" unit="chars" reason="illegible"/> <gap quantity="4"
unit="chars" reason="illegible"/> <gap quantity="3" unit="chars"
reason="illegible"/> <gap quantity="5" unit="chars" reason="illegible"/>
shal <gap quantity="2" unit="chars" reason="illegible"/> <gap
quantity="12" unit="chars" reason="illegible"/> </orig>
</line>
я хотел бы применить некоторые стили к нему таким образом, что каждый раз, когда существует последовательность узлов в строка, первый узел зазора предваряется левой квадратной скобкой, а за последним узлом следует прямоугольная квадратная скобка. Число точек, взятых из элемента @quantity in, будет отображаться для каждого узла разметки. Так, например, xml выше должен выглядеть следующим образом:
[.... .... .... ....] shal [.. ............]
Я написал шаблон, который добавляет скобки перед первым узлом и после последнего узла, поэтому выглядит это:
[.... .... ... ..... ШЭЛ .. ............]
Мой код XSLT здесь:
<xsl:template match="tei:orig/tei:gap">
<xsl:variable name="max" select="@quantity"/>
<xsl:if test="not(preceding-sibling::tei:gap)">
<xsl:text>[</xsl:text>
</xsl:if>
<xsl:for-each select="1 to $max">
<xsl:text>.</xsl:text>
</xsl:for-each>
<xsl:if test="not(following-sibling::tei:gap)">
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:template>
Как обращаться с другими кронштейнами? Я думал, что смогу это сделать, написав шаблон, который применяется к узлу напрямую, увеличив уровень и используя position(), но это просто обертывает каждый набор точек в квадратных скобках вместо того, чтобы только обернуть начало и конец каждой последовательности узлов.
EDIT: Мой оригинальный образец XML был запутанным и неточно объяснял, что мне нужно сделать, поэтому, надеюсь, эта новая деталь поможет в этом отношении.
У вас есть ** ** смежные пробелы, вы хотите сгруппировать? В вашем примере их нет, но вы тестируете предыдущие пробелы в браке, по-видимому, без уважительной причины. –
Хорошая точка. Я схватил случайный пример (извините за это ... я спрашивал из аэропорта), но возможно, что линия имеет несколько смежных разрывов, разделенных пробелом.Моя цель состоит в том, чтобы проверить, что предшествует родной брат, и после того, как братец должен был получить первый и последний промежутки, хотя я полагаю, что мне действительно нужен первый и последний пробел в любой их группировке в узле. –
medievalmatt
Ух, извините за ужасный комментарий ... автокоррекция телефона раздражает. – medievalmatt