Интересно, как объединить / сгруппировать / объединить XML-элементы по их содержимому, чтобы сгруппированные значения встречались только один раз, а остальная часть узла была объединена в результат, как если бы можно было группировать результаты в современных SQL-диалектах, таких какMariaDB (без дубликатов в результатах).
Я уже искал решение, но приведенные здесь примеры или где-то еще не соответствуют моим требованиям - также не после их корректировки.Я думаю, что позиция <lemma>
может быть проблемой.С другой стороны, я думаю / надеюсь, что решение все равно будет возможно.
Упрощенная структура моих документов и желаемый результат:
XML:
<root>
<artikel>
<lemma-position>
<lemma>Abend</lemma>
<info>aaa</info>
</lemma-position>
<bedeutungsposition nr="1a">
<bedeutung>Zeit am Ende des Tages</bedeutung>
</bedeutungsposition>
<bedeutungsposition nr="1b">
<bedeutung>
was anderes
</bedeutung>
</bedeutungsposition>
</artikel>
<artikel>
<lemma-position>
<lemma>Abend</lemma>
<info>bbb</info>
</lemma-position>
<bedeutungsposition nr="1">
<bedeutung>abcdefg</bedeutung>
</bedeutungsposition>
<bedeutungsposition nr="2">
<bedeutung>japoisdfoiasjdfoasjdfl</bedeutung>
</bedeutungsposition>
</artikel>
</root>
В этом примере узел <lemma>
содержит«Абенд», и это должно быть значение для группировки.
желаемый вывод:
<root>
<artikel>
<lemma-position>
<lemma>Abend</lemma>
<info>aaa</info>
<info>bbb</lemma>
</lemma-position>
<bedeutungsposition nr="1">
<bedeutung>abcdefg</bedeutung>
</bedeutungsposition>
<bedeutungsposition nr="1a">
<bedeutung>Zeit am Ende des Tages</bedeutung>
</bedeutungsposition>
<bedeutungsposition nr="1b">
<bedeutung>
was anderes
</bedeutung>
</bedeutungsposition>
<bedeutungsposition nr="2">
<bedeutung>japoisdfoiasjdfoasjdfl</bedeutung>
</bedeutungsposition>
</artikel>
</root>
То, что я получаю, представляет собой неотправленную копию, то есть XML-вход, или его часть, но не объединенную вообще.Я уже пробовал несколько вещей, из которых база всегда выглядит примерно так:
<xsl:template match="/">
<xsl:copy>
<xsl:for-each-group select="artikel" group-by="//lemma">
<xsl:copy-of select="current-group()//lemma/*" />
<!--
I also placed some other paths and expressions here or above to
select the elements differently, without success however.
-->
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
Я также пробовал xQuery с distinct-values
и т. Д., Но он также не работал (без дубликатов).
Я тестирую с Oxygen и baseX, оба подключаются к Saxon-9.8 HE, так что на самом деле все должно быть хорошо.Решение в XSLT будет цениться так же, как и в xQuery