Использование SaxonHE 9.7/XPath-2,0XSLT-2,0: Объединяя результаты текущей группе() в одну
Мой XML:
<osm>
<node>
<tag k="fhrs:id" v="204258"/>
<tag k="name" v="King of Wessex"/>
</node>
<node>
<tag k="fhrs:id" v="139245"/>
<tag k="name" v="The Royal Oak"/>
</node>
<node>
<tag k="fhrs:id" v="204258"/>
<tag k="name" v="The Rising Sun"/>
</node>
etc...
</osm>
Я возвращаю все дублированные значения (v=
) от fhrs:id
используя:
Я преобразовываю выход в формат geojson. Это требует, чтобы каждый элемент, кроме конечного, заканчивался запятой. В других подпрограммах я использовал это, чтобы проверить, если он является последним:
<xsl:template match="/*/*/tag">
{
...<snip>...
}<xsl:if test="position() < last()">,</xsl:if>
</xsl:template>
Однако, поскольку в этом случае xsl:apply-templates
только проходя два за один раз, каждый элемент отсутствует запятую на выходе GeoJSON ,
Есть ли способ объединить все выходы xsl:for-each-group
в один, прежде чем передать его xsl:apply-templates
или альтернативный способ найти конечный элемент? Есть ли xsl:for-each-group
даже лучший способ сделать это?
Я рассмотрел различные способы использования переменных/массивов, но не соответствует размеру счета.
Я пробовал это ранее и Saxon возвращает «Последовательность более чем одного элемента не допускается как значение переменной $ duplicates ( , , ...)« –
DaveF
@DaveF, извините, что тип 'element() *' для последовательности. –
Это сработало, за исключением last() возвращало общее количество ** всех ** fhrs: id значений не только дублированных. Поэтому я передал переменную 'duplicates' в прикладной шаблон: ' \t \t \t \t \t XSL: Наносить-шаблоны> ' и использовать его так: '} , 'Является в лучшем wqay ? –
DaveF