У меня возникли проблемы с динамической группировкой с помощью XSLT.Группа динамически сгенерированных узлов
Моя проблема сложна (я думаю) частично из-за того, что набор узлов, который я пытаюсь преобразовать, динамически генерируется из расширения apache xalan/sql. Я внимательно следил за примером на сайте документации: see link.
Проект XSLT большой; Я включил только самое необходимое ниже:
<xsl:template match="/">
<!-- I omitted the connection management code -->
<xsl:variable name="result" select="sql:query($connection, $query)"/>
<xsl:apply-templates select="$result/sql/row-set"/>
</xsl:template>
<xsl:template match="row">
<xsl:apply-templates select="col"/>
</xsl:template>
<xsl:template match="col">
<xsl:value-of select="text()"/>
</xsl:template>
В $ результат имеет множество узлов этой структуры:
<sql>
<row-set>
<row>
<col column-label='Name'>Bob</col>
<col column-label='Site'>Site1</col>
<col column-label='Active'>Yes</col>
</row>
<row>
<col column-label='Name'>Sally</col>
<col column-label='Site'>Site2</col>
<col column-label='Active'>Yes</col>
</row>
<row>
<col column-label='Name'>Sam</col>
<col column-label='Site'>Site1</col>
<col column-label='Active'>No</col>
</row>
<row>
<col column-label='Name'>Jeff</col>
<col column-label='Site'>Site2</col>
<col column-label='Active'>Yes</col>
</row>
</row-set>
</sql>
желаемого результата:
<sql>
<row-set>
<site>
<site-name>Site1</site-name>
<active>
<name>Bob</name>
</active>
<in-active>
<name>Sam</name>
</in-active>
</site>
<site>
<site-name>Site2</site-name>
<active>
<name>Sally</name>
<name>Jeff</name>
</active>
<in-active/>
</site>
</row-set>
</sql>
У меня было трудное время пытаясь сгруппировать с помощью клавиш a la muenchian с совпадение не допускает переменные:
<xsl:key name="group-site" match="$result/sql/row-set/" use=?>
Не звучать неприятно, но XSL - это преобразование структурированных XML-документов. С этой точки зрения ваш набор $ $ result вряд ли может предложить какую-либо интересную структуру. – xbug
Поскольку входной XML, по-видимому, является прямым выходом базы данных SQL, я бы предположил, что вы «GROUP BY site», по крайней мере, и отразите этот элемент структуры в XML. – xbug
@xbug - Я согласен с предположением, что XSLT может оказаться не лучшим инструментом. К сожалению, это унаследованный проект, который я увеличиваю. Тем не менее, есть исходный XML-документ, но я его пропустил. Исходный XML содержит узлы, которые необходимы для построения запроса sql $. Мой «Желаемый результат», показанный выше, будет интегрирован с исходным документом для создания нового преобразованного XML. – user2503167