xslt模板将xml从给定的xml输入转换为预期的xml输出
xml输入的一部分,我需要时间来解决所需的输出xslt模板将xml从给定的xml输入转换为预期的xml输出,xml,xslt,Xml,Xslt,xml输入的一部分,我需要时间来解决所需的输出 <contrib-group> <contrib contrib-type="editor"> <name> <surname>John</surname> <given-names>Cover B.</given-names> </name> <
<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>
<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>
约翰
封面B。
1,2
彼得
克鲁斯J。
1,3
约翰
克鲁兹K。
1.
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>
约翰
封面B。
1,2
彼得
克鲁斯J。
1,3
约翰
克鲁兹K。
1.
当前xslt的一部分,需要更正以解决所需的输出
<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>
<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元素中迭代child元素,而contrib元素需要复制为父标记
我更新了xslt的部分。我需要删除父contrib标记,并需要在填充的contrib中添加元素xref。在XSLT 3中,您可以对每个组使用
,从开始加xsl:copy select=“…”
:
如果您确实在使用Saxon 8,那么它不会执行XSLT 3和xsl:copy select
,但是每个组的应该可以工作(假设它是一个实现XSLT 2的Saxon 8版本,我认为大多数Saxon 8版本都发生在最终XSLT 2规范的开发过程中,Saxon 8.9是第一个实现最终XSLT 2规范的版本)
对于xsl:copy select=“…”
在XSLT 3中,您可以在XSLT 2中使用
,您需要调整
以使用输入和输出XML之间的区别是什么?如果contrib元素中有两个name元素,则应将其拆分为两个contrib元素。我的XSLT更新您使用哪个版本的XSLT,还是您的XSLT处理r支持?使用saxon8.jar