Часть входных данных xml, которая требует времени для решения требуемых выходных данных.
<contrib-group>
<contrib contrib-type="editor">
<name>
<surname>John</surname>
<given-names>Cover B.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1,2</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Peter</surname>
<given-names>Crus J.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1,3</sup>
</xref>
<name>
<surname>John</surname>
<given-names>Cruz K.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
</contrib-group>
Часть xml ожидаемых выходных данных, которые, кажется, легко зафиксировать визуально.
<contrib-group>
<contrib contrib-type="editor">
<name>
<surname>John</surname>
<given-names>Cover B.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1,2</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Peter</surname>
<given-names>Crus J.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1,3</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>John</surname>
<given-names>Cruz K.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
</contrib-group>
Часть текущего xslt, которую необходимо исправить для получения требуемого результата.
<xsl:template match="contrib">
<xsl:element name="{name()}">
<xsl:for-each select="name">
<xsl:element name="{name(parent::*)}">
<xsl:attribute name="contrib-type">
<xsl:value-of select="../@contrib-type"/>
</xsl:attribute>
<xsl:element name="{name()}">
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
Трудно перебирать дочерние элементы внутри элемента contrib, который должен быть воспроизведен как родительский тег.
Обновил часть xslt. Мне нужно удалить родительский тег contrib и добавить элемент xref внутри заполненного contrib.